-1

CheckBoxクリックイベントで行のテキストの色を変更しようと多くの時間を費やしました。

したがって、チェックボックスがオンになっている場合は色を灰色に設定し、チェックボックスがオフになっている場合は通常の色に戻す必要があります。

この結果を得るのを手伝ってください(DataGridはxmlファイルにバインドされています)。

更新 いくつかのコード:

チェックされた列に基づいて行の色を変更するための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.");
        }
    }       
4

2 に答える 2

1

あなたの質問はかなり曖昧ですが、私は助けようとします。

この例を考えてみましょう。

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

このスニペットでは、チェックボックス列をデータインスタンスのプロパティにバインドし、このプロパティがfalseの場合にスタイルトリガーを追加しました。これはあなたが探しているものですか?

質問の更新後に編集

あなたのスタイルがDataGridに割り当てられている場所であなたが提供したものをコードで見ることができません:

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

あなたのスタイルはx:Keyプロパティを宣言していません。

これを追加すると機能しますが、静的なファイド/プロパティは悪臭がします。次のように変更することを検討してください。

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

これにより、このフィールドも削除されます。

于 2012-07-10T06:54:48.157 に答える
0

ここに示すようなコンバーターを使用します:http://timheuer.com/blog/archive/2008/07/30/format-data-in-silverlight-databinding-valueconverter.aspx

于 2012-07-10T06:56:57.830 に答える