WPF Привязка к простой собственности - не работает - PullRequest
0 голосов
/ 06 апреля 2011

У меня есть элемент управления, в котором я хочу привязать цвет к обычному свойству в своем собственном классе.

Но это не работает ??? какие-нибудь подсказки?

У меня есть это

 public Brush SeperatorColour
    {
        get { return (Brush)GetValue(SeperatorColourProperty); }
        set { SetValue(SeperatorColourProperty, value); }
    }

    // Using a DependencyProperty as the backing store for SeperatorColour.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty SeperatorColourProperty =
        DependencyProperty.Register("SeperatorColour", typeof(Brush), typeof(TycoMessageBarMessage), new UIPropertyMetadata(Brushes.Crimson));

А это

    <StackPanel Orientation="Horizontal" Background="Black" >
    <Rectangle Name="MessageSeperator" Height="auto" Width="10" Fill="{Binding Path=SeperatorColour, ElementName=container, Mode=OneTime}"   />
    <TextBlock Name="MessageText" Text="Hello"  Foreground="White" Margin="5,0" />
</StackPanel>

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Вам либо нужно установить имя вашего элемента управления на container:

<UserControl xmlns="..."
             x:Name="container">

ИЛИ использовать относительное связывание:

Fill="{Binding Path=SeperatorColour, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type MyControl}}, Mode=OneTime}"

Здесь вместо MyControl вам нужночтобы указать тип вашего элемента управления.

В случае, если это пользовательский элемент управления и показанный вами XAML находится внутри шаблона элемента управления для элемента управления, вы можете использовать TemplateBinding:

Fill="{TemplateBinding SeperatorColour}"
1 голос
/ 06 апреля 2011

ElementName = container

подразумевает, что вы привязываетесь к другому элементу XAML с именем «container», возможно, вы захотите привязать к какому-либо экземпляру объекта свойство SeperatorColour.

Если вы не привязываетесь к другому элементу XAML, не добавляйте «ElementName» в выражение привязки.

0 голосов
/ 06 апреля 2011

Это должно работать отлично, если вы правильно установили DataContext для своего UserControl -

 <Rectangle Name="MessageSeperator" Height="auto" Width="10" Fill="{Binding Path=SeperatorColour, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}"   />

Что вы видите в окне вывода при запуске приложения?Была ли какая-либо ошибка привязки данных ??

Для отладки привязок данных, пожалуйста, обратитесь - http://bea.stollnitz.com/blog/index.php?s=presentationtrace

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...