Привязка Setter Set к публичной собственности? - PullRequest
0 голосов
/ 21 мая 2011

Я хочу связать свойство Fill в стиле с общедоступным свойством. Я использовал следующий способ, но, похоже, он не работает.

public SevenSegmentControl()
{
    InitializeComponent();
    SevenSegmentColor = Color.FromRgb(251, 23, 23);
}

public Color SevenSegmentColor { get; set; }
<Style x:Key="RectangleStyle1" TargetType="{x:Type Rectangle}">
    <Setter Property="Fill" Value="{Binding Path=SevenSegmentColor, Mode=TwoWay}"/>
    <Setter Property="RadiusX" Value="4"/>
    <Setter Property="RadiusY" Value="4"/>
    <Setter Property="StrokeThickness" Value="0"/>
    <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
</Style>

Как я могу это сделать?

1 Ответ

2 голосов
/ 21 мая 2011

Вы пытаетесь установить значение цвета непосредственно для свойства Fill , которое имеет тип Brush. Вы можете просмотреть окно вывода, чтобы обнаружить ошибки привязки .вам нужен valueconverter , чтобы преобразовать ваш цвет в правильную кисть, или вам нужно сделать вот так

 public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            SevenSegmentColor =new SolidColorBrush(Color.FromRgb(251, 23, 23));
            DataContext=this;
        }

        public SolidColorBrush SevenSegmentColor { get; set; }

    }

РЕДАКТИРОВАТЬ

Если вы назначаетеDatacontext до установки значения свойства, пользовательский интерфейс никогда не будет уведомлен об изменении вашего свойства. Как в вашем случае вы назначаете datacontext, используя

DataContext="{Binding RelativeSource={RelativeSource Self}}"

Таким образом, Datacontext устанавливается во время инициализацииВашему свойству SevenSegmentColor присвоено значение. Позднее после инициализации, когда вы присвоили значение цвета для своего свойства, пользовательский интерфейс никогда не будет получать уведомления, и, следовательно, ваш цвет не отображается в пользовательском интерфейсе. Чтобы решить эту проблему, необходимо реализовать INotifyPropertyChanged Интерфейс в вашем UserControl

Образец

 /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window,INotifyPropertyChanged
    {
        private SolidColorBrush sevenSegmentColor;
        public MainWindow()
        { 
            InitializeComponent();
           SevenSegmentColor =new SolidColorBrush(Color.FromRgb(251, 23, 23));
        }

        public SolidColorBrush SevenSegmentColor
        {
            get
            {
                return sevenSegmentColor;
            }
            set
            {
                sevenSegmentColor = value;
                // Call OnPropertyChanged whenever the property is updated
                OnPropertyChanged("SevenSegmentColor");
            }
        }

        // Declare the event
        public event PropertyChangedEventHandler PropertyChanged;

        // Create the OnPropertyChanged method to raise the event
        public void OnPropertyChanged(string name)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(name));
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...