привязка данных к пользовательскому элементу управления, работающему только частично (silverlight) - PullRequest
0 голосов
/ 28 мая 2011

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

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

Вот как я это называю с главной страницы:

<mynamespace:BorderedText x:Name="DateTime"
                   Grid.Column="1"
                   Grid.Row="0"
                   BorderStyle="{StaticResource borderStyle}"
                   LabelStyle="{StaticResource labelStyle}"
                   TextStyle="{StaticResource valueStyle}"
                   Label="Current Date/Time"                                           
                   Text="N/A" />

Управление довольно простое:

<UserControl x:Class="MyNamespace.BorderedText"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         d:DesignHeight="480"
         d:DesignWidth="480">

<Grid>
    <Border Name="border" Style="{Binding BorderStyle}">
        <StackPanel>
            <TextBlock Style="{Binding LabelStyle}"
                       Text="{Binding Label}" />
            <TextBlock Style="{Binding TextStyle}"
                       Text="{Binding Text}" />
        </StackPanel>
    </Border>
</Grid>

Проблема в том, что все данныепривязка работает, за исключением привязки данных границы.Я также пытался связать данные с фоном или любым другим свойством, но безуспешно.Код позади имеет настроенные свойства DependencyProperty и все.Обратите внимание, что DataContext для привязки данных устанавливается в конструкторе.Пытался присвоить его Сетка или самой Границе, но безуспешно.Кто-нибудь знает или видит что-то большое, чего мне здесь не хватает?

namespace MyNamespace
{
    public partial class BorderedText : UserControl
    {
        public static readonly DependencyProperty LabelProperty = DependencyProperty.Register("Label", typeof(string), typeof(BorderedText), new PropertyMetadata(null));

        public static readonly DependencyProperty LabelStyleProperty = DependencyProperty.Register("LabelStyle", typeof(Style), typeof(BorderedText), new PropertyMetadata(null));

        public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(BorderedText), new PropertyMetadata(null));

        public static readonly DependencyProperty TextStyleProperty = DependencyProperty.Register("TextStyle", typeof(Style), typeof(BorderedText), new PropertyMetadata(null));

        public static readonly DependencyProperty BorderStyleProperty = DependencyProperty.Register("BorderStyle", typeof(Style), typeof(BorderedText), new PropertyMetadata(null));

        public BorderedText()
        {
            InitializeComponent();
            ((Grid)this.Content).DataContext = this;
            //((Border)this.Content).DataContext = this;
        }

        public string Label
        {
            set { SetValue(LabelProperty, value); }
            get { return (string)GetValue(LabelProperty); }
        }

        public Style LabelStyle
        {
            set { SetValue(LabelStyleProperty, value); }
            get { return (Style)GetValue(LabelStyleProperty); }
        }

        public string Text
        {
            set { SetValue(TextProperty, value); }
            get { return (string)GetValue(TextProperty); }
        }

        public Style TextStyle
        {
            set { SetValue(TextStyleProperty, value); }
            get { return (Style)GetValue(TextStyleProperty); }
        }

        public Style BorderStyle
        {
            set { SetValue(BorderStyleProperty, value); }
            get { return (Style)GetValue(BorderStyleProperty); }
        }
    }
}

---- ОБНОВЛЕНИЕ:

Оказалось, что это нечто совершенно иное, не связанное с привязкой данных, которая правильноwired ...

В borderStyle я использовал этот синтаксис для свойства фона:

        <Setter Property="Background">
            <Setter.Value>
                <SolidColorBrush>
                    <SolidColorBrush.Color>
                        <Color>
                            <Color.A>
                                100
                            </Color.A>
                            <Color.R>#95</Color.R>
                            <Color.B>#ED</Color.B>
                        </Color>
                    </SolidColorBrush.Color>
                </SolidColorBrush>
            </Setter.Value>
        </Setter>

, которое, очевидно, работает в конструкторе, но не в телефоне.Изменив его на:

        <Setter Property="Background">
            <Setter.Value>
                <SolidColorBrush Color="#649500ED" />
            </Setter.Value>
        </Setter>

Решил проблему

1 Ответ

0 голосов
/ 28 мая 2011

Ну, вы забыли одну вещь ... DataContext of the Border! Дайте вашему UserControl имя, и затем вы можете добавить к своему привязке что-то вроде:

<TextBox Text="{Binding Path=MyText, ElementName=UserControlRoot}" />

это будет работать (по крайней мере, у меня это работало в WPF, хе)

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