我正在尝试为标签定义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>
答案 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;
某处