xaml代码无法正常工作 - c#

时间:2012-11-26 15:43:49

标签: xaml c#-4.0

我有以下代码:

<DataTemplate DataType="{x:Type abc}">
                <StackPanel Orientation="Horizontal">
                    <CheckBox Margin="0,0,3,0" x:Name="CheckBox">
                        <CheckBox.IsChecked>
                            <Binding Path="IsSelected"
                                     Mode="TwoWay">
                                <Binding.RelativeSource>
                                    <RelativeSource Mode="Template" />
                                </Binding.RelativeSource>
                            </Binding>
                        </CheckBox.IsChecked>
                    </CheckBox>                                    
                    <TextBlock Text="{Binding}"
                               Margin="0,0,10,5" />
                    <TextBlock Text="{Binding Channel}"
                               Margin="7,0,0,0"
                               Visibility="{Binding Path=IsChannelVisible,ElementName=View, Converter={StaticResource BooleanToVisibile}}" />
                </StackPanel>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding Valid}" Value="true">
                        <Setter TargetName="CheckBox" Property="Foreground" Value="#000000"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding Valid}" Value="false">
                        <Setter TargetName="CheckBox" Property="Foreground" Value="#999999"/>
                    </DataTrigger>
                </DataTemplate.Triggers>
</DataTemplate>

我想要实现的是改变复选框文本的颜色。但上面的代码不起作用。有人可以帮我这个吗?

尝试来自Tilak的代码:

<ControlTemplate x:Key="Template"
                             TargetType="ListViewItem">
                <StackPanel Orientation="Horizontal">
                    <CheckBox Margin="7,0,0,0" Foreground={Binding Valid, Converter={StaticResource ValidToColorConverter}} 
                              x:Name="CheckBox">
                        <CheckBox.IsChecked>
                            <Binding Path="IsSelected"
                                     Mode="TwoWay">
                                <Binding.RelativeSource>
                                    <RelativeSource Mode="Parent" />
                                </Binding.RelativeSource>
                            </Binding>
                        </CheckBox.IsChecked>
                    </CheckBox>                    
                    <ContentPresenter />
                    <DataTemplate.CheckBox>
                        <Intellivu:ValidToColorConverter x:Key="ValidToColorConverter" />
                    </DataTemplate.CheckBox>
                </StackPanel>
            </ControlTemplate>

这不行?难道我做错了什么?

1 个答案:

答案 0 :(得分:0)

您可以使用转换器并直接绑定到Foreground属性。

按照以下步骤进行操作

创建ValidToColorConverter

public class ValidToColorConverter : IValueConverter
{
    // This converts the DateTime object to the string to display.
    public object Convert(object value, Type targetType, object parameter,
        System.Globalization.CultureInfo culture)
    {
      bool valid = value as bool;
      return valid ? Colors.Black : new SolidColorBrush(Colors.FromArgb(255,99,99,99));
    }

    // No need to implement converting back on a one-way binding 
    public object ConvertBack(object value, Type targetType, 
        object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

将ValidToColorConverter添加为与控件

对应的资源中的静态资源
 <DataTemplate.Resources>
  <local:ValidToColorConverter x:Key="ValidToColorConverter" />
</DataTemplate.Resources>

注意 - 本地应添加到页面命名空间(对应于定义转换器的命名空间)

请参阅复选框中的转换器

<CheckBox Margin="0,0,3,0" Foreground={Binding Valid, Converter={StaticResource ValidToColorConverter}} x:Name="CheckBox">
相关问题