WPF标签DataTemplate

时间:2011-03-17 11:01:21

标签: c# .net wpf templates

我正在尝试为标签定义datatemplate。这可能吗?由于我找不到任何有用的东西,我定义了一个控件模板,并尝试让事情有效。不幸的是,当我按如下方式绑定两个项目时,我得到的标签什么也没有显示,即使具有给定参数的对象已成功绑定到后面的代码中的标签。请帮忙!

<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>

已编辑:所需的window.resources的完整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 个答案:

答案 0 :(得分:2)

您需要更改绑定,如下所示:

<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 :(得分:1)

在这种情况下,我建议您创建自定义控件。它会更优雅。

答案 2 :(得分:1)

恕我直言,Label的DataContext设置错误,因此没有显示值。

我的猜测是默认的DataContext在这里适用于Label,它不包含TableName和ColumnName属性。

查看您的输出窗口并查找“错误40,绑定bla bla bla .....”这将为您提供更多信息。

注意,破坏的dataBindings不会总是产生异常,它们有时只会在输出窗口中显示警告。

您应该提供有关Label类的更多信息,以及如何将dataContext设置为包含所提及属性的对象。

你可能遗漏了像

这样的东西

MyCustomLabel.DataContext = MyCustomObjectCOntainingTheProperties;

某处