WPF Label DataTemplate - PullRequest
       1

WPF Label DataTemplate

1 голос
/ 17 марта 2011

Я пытаюсь определить табличку с данными для метки. Это возможно? Поскольку я не мог найти ничего полезного для продвижения вперед, я определил шаблон управления и попытался заставить все работать. К сожалению, когда я связываю два элемента следующим образом, я получаю метку, которая ничего не отображает, даже если объект с заданными параметрами был успешно привязан к метке из кода. Пожалуйста, помогите!

<Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Label">
                    <Border>
                        <Grid>

                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                            </Grid.ColumnDefinitions>

                            <TextBlock Background="Green" Text="{Binding TableName}" Grid.Column="0"></TextBlock>
                            <TextBlock Background="Red" Text="{Binding ColumnName}"  Grid.Column="1"></TextBlock>

                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

Отредактировано: полный Xaml окна. Ресурсы по запросу

  <Window.Resources>

    <Style x:Key="myLabelTemplate" TargetType="Label">
        <!--<Setter Property="Background" Value="DarkKhaki"></Setter>
         <Setter Property="Foreground" Value="White"></Setter>-->

        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Label">
                    <Border>
                        <Grid>

                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                                <ColumnDefinition Width="Auto"></ColumnDefinition>
                            </Grid.ColumnDefinitions>

                           <!-- <TextBlock Background="Green" Text="{Binding TableName}" Grid.Column="0"></TextBlock>
                            <TextBlock Background="Red" Text="{Binding ColumnName}"  Grid.Column="1"></TextBlock>-->

                        </Grid>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>

    </Style>


    <!-- <ControlTemplate TargetType="Label" x:Key="tablelLabel">
        <Grid>
            <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="5" CornerRadius="5">
                <Border.Background>
                    <SolidColorBrush Color="#50000000"></SolidColorBrush>
                </Border.Background>
            </Border>
            <Grid>
                <Grid.Background>
                    <LinearGradientBrush StartPoint="0.5,0"  EndPoint="0.5,1">
                        <GradientStop Color="Transparent" Offset="0" />
                        <GradientStop Color="Black" Offset="1" />
                        <GradientStop Color="Transparent" Offset="1" />
                    </LinearGradientBrush>
                </Grid.Background>
            </Grid>
        </Grid>

    </ControlTemplate> -->

    <ControlTemplate TargetType="Label" x:Key="generalLabel">
        <Grid>
            <Border BorderBrush="#34B7AEAE" BorderThickness="3" CornerRadius="5">
            </Border>
        </Grid>
    </ControlTemplate>

</Window.Resources>

Ответы [ 3 ]

2 голосов
/ 18 марта 2011

Вам необходимо изменить привязку следующим образом:

<TextBlock Background="Green" Text="{Binding Source={StaticResource data}, Path=TableName}" Grid.Column="0"/>
 <TextBlock Background="Red" Text="{Binding Source={StaticResource data}, Path=ColumnName}"  Grid.Column="1"></TextBlock>

Я попробовал пересмотренный код с простым классом, имеющим два свойства, и он успешно работал.

На ObjectDataProvider ссылались следующим образом:

 <ObjectDataProvider x:Key="data" ObjectType="{x:Type local:MyClass}">
 </ObjectDataProvider>
1 голос
/ 17 марта 2011

ИМХО, DataContext метки задан неправильно, отсюда и отсутствие значения.

Я предполагаю, что DataContext по умолчанию применяется для метки здесь, и он не содержит свойств TableName и ColumnName.

взгляните на ваше окно вывода и найдите «ошибка 40, Binding bla bla bla .....», это даст вам больше информации об этом.

Остерегайтесь, нарушенные привязки данных не всегда будут вызывать исключение, иногда они будут отображать только предупреждение в окне вывода.

вы должны предоставить больше информации о вашем классе Label и о том, как вы устанавливаете dataContext для объекта, содержащего упомянутые свойства.

вы, вероятно, упускаете что-то вроде

MyCustomLabel.DataContext = MyCustomObjectCOntainingTheProperties;

где

1 голос
/ 17 марта 2011

В этом случае я рекомендую вам создать пользовательский элемент управления.Это было бы более элегантно.

...