2012-07-10 56 views
-1

我花了很多時間嘗試在CheckBox單擊事件中更改行文本顏色。如何更改DataGrid單擊複選框上的行顏色?

因此,如果複選框被選中,我們需要將顏色設置爲灰色,並且如果未選中複選框,則將其返回正常顏色。

請幫忙得到這個結果(DataGrid綁定到xml文件)。

Upd。有些代碼:

XAML爲行變色基於選中(複選框)柱:

<Window.Resources> 
    <Style TargetType="{x:Type DataGridRow}"> 
     <Setter Property="Foreground" Value="{Binding Checked, Converter={x:Static local:MainWindow.rowCheckedConverter}}" /> 
    </Style> 
</Window.Resources> 

... 
<Grid.DataContext> 
    <XmlDataProvider x:Name="userTasksProvider" XPath="UserTasks" /> 
</Grid.DataContext> 
... 

<DataGrid Name="dgUserTasks" Grid.Column="1" Margin="1,0,0,0" 
    AutoGenerateColumns="False" HeadersVisibility="None" 
    ItemsSource="{Binding XPath=Task}"> 

    <DataGrid.Columns> 
    <DataGridCheckBoxColumn x:Name="cbUserTasksColumn" Width="20" 
     Binding="{Binding Checked, 
     Mode=TwoWay}" Header=""> 
    </DataGridCheckBoxColumn> 

    <DataGridTextColumn 
     x:Name="Info" Width="*" 
     Binding="{Binding Info, 
     Mode=TwoWay}" 
     Header="" > 
    </DataGridTextColumn> 
... 

C#WPF:

public partial class MainWindow : Window 
    { 
     public static RowCheckedConverter rowCheckedConverter = new RowCheckedConverter(); 
     ... 
    } 

    ... 

    public class RowCheckedConverter : IValueConverter { 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 

      if ((bool)value) { 
       return new SolidColorBrush(Colors.Gray); 
      } 
      else { 
       return new SolidColorBrush(Colors.Black); 
      } 

     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { 
      throw new Exception("The method or operation is not implemented."); 
     } 
    }  
+0

提供一些代碼,請... – Tigran 2012-07-10 06:40:25

+0

-1,因爲如果該複選框布爾值是集合的ItemsSource的一部分,它是不是沒有說明。這對於答案是至關重要的。提供一些代碼,我會刪除downvote,你也會得到一些更好的幫助;) – blindmeis 2012-07-10 09:30:17

+0

謝謝,提供的源代碼。 – 2012-07-10 11:17:34

回答

0

你的問題是相當模糊,但我會盡力幫助。

考慮這個例子:

<DataGrid ItemsSource="{Binding DataSet}" AutoGenerateColumns="False"> 
     <DataGrid.RowStyle> 
      <Style TargetType="DataGridRow"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsActive}" Value="False"> 
         <Setter Property="Foreground" Value="Gray"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </DataGrid.RowStyle> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Name}"> 
      </DataGridTextColumn> 
      <DataGridCheckBoxColumn Binding="{Binding IsActive, Mode=TwoWay}"> 

      </DataGridCheckBoxColumn> 

     </DataGrid.Columns> 
    </DataGrid> 

和代碼:

public partial class MainWindow : Window 
{ 
    public ObservableCollection<Data> DataSet { get; set; } 

    public MainWindow() 
    { 
     DataSet = new ObservableCollection<Data>(); 
     DataSet.Add(new Data { Name = "First" }); 
     DataSet.Add(new Data { Name = "Second" }); 
     DataSet.Add(new Data { Name = "Third" }); 
     InitializeComponent(); 
     DataContext = this; 
    } 

} 

public class Data 
{ 
    public string Name { get; set; } 

    public bool IsActive { get; set; } 
} 

在這個片段中我必然複選框列在數據實例屬性,並添加樣式觸發時,這個屬性是假的。這是你在哪裏尋找?

<DataGrid RowStyle="{StaticResource myStyle}" ...> 

和你的風格不x聲明:Key屬性問題更新

我不能在代碼中看到您提供您的風格被分配給數據網格後

編輯。

如果你添加它,它會工作,但靜態fied /屬性只是味道不好。考慮更換爲:

<Style TargetType="DataGridRow" x:Key="myStyle"> 
    <Style.Triggers> 
      <DataTrigger Binding="{Binding Checked}" Value="False"> 
       <Setter Property="Foreground" Value="Gray"/> 
      </DataTrigger> 
    </Style.Triggers> 
</Style> 

如果你有決心使用轉換器考慮到長寧:

<Style TargetType="{x:Type DataGridRow}" x:Key="myStyle"> 
    <Setter Property="Foreground" > 
     <Setter.Value> 
      <Binding Path="Checked"> 
       <Binding.Converter> 
        <local:RowCheckedConverter /> 
       </Binding.Converter> 
      </Binding> 
     </Setter.Value> 
    </Setter> 
</Style> 

這也將消除這一領域。

+0

拉法爾,非常感謝你的快速回答。你的代碼似乎工作。但我不能使它與XmlDataProvider(綁定到XML文件)... – 2012-07-10 11:12:28

+0

再次感謝。好的解決方案這是完全可行的。 – 2012-07-10 12:17:41

+0

如果你說答案是正確的/有幫助的,那你爲什麼不接受它? – Rafal 2012-07-12 18:48:55