2012-11-26 117 views
0

我有以下代碼:XAML代碼不工作 - C#

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

什麼,我想實現的就是改變複選框文本的顏色。但上面的代碼不起作用。任何人都可以幫助我嗎?從提拉克

嘗試代碼:

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

這不是工作?難道我做錯了什麼?

+0

您是否嘗試直接更改CheckBox的Foreground屬性? –

+0

@ArsenMkrt - 我如何直接更改它?我可以在代碼中執行一些操作嗎? – NoviceMe

+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"> 
+0

我試過上面這樣的代碼: – NoviceMe

+0

你得到了什麼錯誤? – Tilak

+0

我添加了如何編寫上面的代碼。我認爲一個錯誤是我在前臺值中需要的「」。其他錯誤不識別ValidToColorConverter。 – NoviceMe