Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 Отображение свойства UC  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Использую UC для TextBox с подсказкой. Раньше свойство Text в конструкторе отображалось без проблем. Не обратил внимание в какой именно момент, оно в конструкторе перестало отображаться. Увидел это сегодня. Вроде никаких изменений в UC не вносил. По крайней мере не помню такого. Может Студия гонит? ....Или я случайно что-то изменил...
Посмотрите, пожалуйста, как у вас работать будет.
<UserControl x:Class="WpfLibrary.TextBoxPromptUC"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfLibrary"
             mc:Ignorable="d" 
             >
    <Grid>
        <TextBlock x:Name="PART_TextBlock" 
                    Foreground="{Binding DefaultTextBrush, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}" 
                    Margin="5,0" Text="{Binding DefaultText, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
                    FontStyle="{Binding FontStyle, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
                    FontSize="{Binding FontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
                    FontFamily="{Binding FontFamily, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
                    FontStretch="{Binding FontStretch, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
        />
        <TextBox x:Name="PART_TextBox"     Background="{x:Null}" 
                 Foreground="{Binding Foreground, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}" 
                 FontStyle="{Binding FontStyle, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
                 FontSize="{Binding FontSize, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
                 FontFamily="{Binding FontFamily, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
                 FontStretch="{Binding FontStretch, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"
                 Text="{Binding Text, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}, UpdateSourceTrigger=PropertyChanged}" 
                 TextChanged="PART_TextBox_TextChanged" 
                 BorderBrush="{x:Null}" 
                 IsReadOnly="{Binding ReadOnly, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:TextBoxPromptUC}}}"/>

    </Grid>
</UserControl>

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace WpfLibrary
{
    /// <summary>
    /// Логика взаимодействия для TextBoxPromptUC.xaml
    /// </summary>
    public partial class TextBoxPromptUC : UserControl
    {
        public TextBoxPromptUC()
        {
            InitializeComponent();
        }

        /// <summary>Свойство для цвета текста подсказки</summary>
        public Brush DefaultTextBrush
        {
            get { return (Brush)GetValue(DefaultTextBrushProperty); }
            set { SetValue(DefaultTextBrushProperty, value); }
        }
        public static readonly DependencyProperty DefaultTextBrushProperty =
            DependencyProperty.Register("DefaultTextBrush", typeof(Brush), typeof(TextBoxPromptUC), new PropertyMetadata(SystemColors.InactiveSelectionHighlightBrush));

        /// <summary>Свойство для текста подсказки</summary>
        public string DefaultText
        {
            get { return (string)GetValue(DefaultTextProperty); }
            set { SetValue(DefaultTextProperty, value); }
        }
        public static readonly DependencyProperty DefaultTextProperty =
            DependencyProperty.Register("DefaultText", typeof(string), typeof(TextBoxPromptUC), new PropertyMetadata("Текст по умолчанию - когда пустой TextBox...."));

        /// <summary>Свойство для текста ввода</summary>
        public string Text
        {
            get { return (string)GetValue(TextProperty); }
            set { SetValue(TextProperty, value); }
        }
        public static readonly DependencyProperty TextProperty =
            DependencyProperty.Register("Text", typeof(string), typeof(TextBoxPromptUC), new PropertyMetadata(""));

        /// <summary>Свойство для режима ReadOnly</summary>
        public bool ReadOnly
        {
            get { return (bool)GetValue(ReadOnlyProperty); }
            set { SetValue(ReadOnlyProperty, value); }
        }
        public static readonly DependencyProperty ReadOnlyProperty =
            DependencyProperty.Register("ReadOnly", typeof(bool), typeof(TextBoxPromptUC), new PropertyMetadata(false));

        /// <summary>Обработчик события изменения текста, устанавливающий видимость/невидимость текста подсказки</summary>
        private void PART_TextBox_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (string.IsNullOrWhiteSpace(Text)) PART_TextBlock.Visibility = Visibility.Visible;
            else PART_TextBlock.Visibility = Visibility.Hidden;
        }
    }

}

Проверял просто вставкой текста
    <Grid>
        <wpflib:TextBoxPromptUC Text="12321"/>
    </Grid>
В конструкторе "12321" не отображается, после запуска на исполнение - отображается.
Может какие настройки Студии на это влияют?
10 дек 18, 13:56    [21759109]     Ответить | Цитировать Сообщить модератору
 Re: Отображение свойства UC  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
конструктор класса всегда выполняется раньше, чем связывание. нельзя из конструктора получить значения связанных свойств зависимостей.
10 дек 18, 14:17    [21759136]     Ответить | Цитировать Сообщить модератору
 Re: Отображение свойства UC  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Roman Mejtes
конструктор класса всегда выполняется раньше, чем связывание. нельзя из конструктора получить значения связанных свойств зависимостей.
Я под "Конструктором" имел ввиду Конструктор в редакторе XAML студии.
10 дек 18, 14:27    [21759161]     Ответить | Цитировать Сообщить модератору
 Re: Отображение свойства UC  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
у меня в группе Misc их видно
10 дек 18, 14:36    [21759176]     Ответить | Цитировать Сообщить модератору
 Re: Отображение свойства UC  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Roman Mejtes
у меня в группе Misc их видно
Похоже у меня всё же Студия гонит... или в какие-то настройки залез...
10 дек 18, 16:41    [21759330]     Ответить | Цитировать Сообщить модератору
 Re: Отображение свойства UC  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Видимо после какого-то из обновлений Конструктор стал работать с багами. Ещё в нескольких местах вылезло неверное отображение элементов в режиме Конструктора. Там где стили, шаблоны задаются в словарях.
10 дек 18, 19:44    [21759518]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить