自由な時間にWPFを学ぼうとしていますが、アプリケーションを起動して実行していますが、しばらく私を逃したことの1つは、それらがすべて共有する列の行の値に基づいて、ページに表示される複数のデータグリッドのスタイルを設定します。StaticResourceでページ共有のDataTriggerスタイルコンバータを見つけることができません
目的は、通貨の金額が正であるか負であるかに基づいて、行全体のテキストの色(Foreground
プロパティ)をスタイルできます。
ハードコードされた値のペアに対して、私がこれまで行ってきたことは、True/Falseを返すために必要な比較を行うConverterへの配線です。
これは私がこれまで持っているものです:私はセットアップしようとしています
<DataGrid AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Width="*" Binding="{Binding Date}" Header="Date"/>
<DataGridTextColumn Width="*" Binding="{Binding Category}" Header="Category"/>
<DataGridTextColumn Width="*" Binding="{Binding Amount}" Header="Amount"/>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
特定Page
は、データの異なる順列で、グリッドのこの同じタイプの3異なる時間を持つことになります。グリッド自体は、必要に応じてすべて動作しています。
データグリッドは、このクラスのコレクションに移入され、次のよう
public class TransactionDto
{
public long Id { get; set; }
public decimal Amount { get; set; }
public string Category { get; set; }
public DateTime Date { get; set; }
}
私が設定したコンバータは、次のとおりです。
public class AmountConverter : IValueConverter
{
private const decimal Threshold = 0.00m;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (decimal)value >= Threshold;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
しかし、私は間の結合を得るように見えることはできませんデータグリッドの列とこのコンバータが把握したものです。これは私が今まで試したことですが、他のSOの質問やその他の質問に投稿された回答を試してみましたが、それらは全く同じ状況ではなく、自分の状況に適用しようとしていませんでした。ここで結合コンバータ:
<Page.Resources>
<Style TargetType="DataGridRow">
<Style.Triggers >
<DataTrigger Binding="{Binding Amount, RelativeSource={RelativeSource Self}, Converter={StaticResource ResourceKey=AmountConverter}}" Value="False">
<Setter Property="Foreground" Value="Red"/>
</DataTrigger>
<DataTrigger Binding="{Binding Amount}" Value="-24.71">
<Setter Property="Foreground" Value="Green"/>
</DataTrigger>
</Style.Triggers>
</Style>
正の値について同様のものが行ったように-24.71
のハードコードされた値を使用してトリガが、正常に動作します。
コードビハインドC#ファイルには、必要な変換タイプとプロパティが含まれています
public AmountConverter AmountConverter { get; set; } = new AmountConverter();
私は取得しています現在の例外は以下の通りです:
System.Windows.Markup.XamlParseException
Provide value on 'System.Windows.Markup.StaticResourceHolder' threw an exception.
私はこの例外を実際に理解しておらず、終了しませんどのように進むか、それが私に何を伝えているのかが問題です。
理想的には、私はこのスタイル設定をApp.xaml
に設定し、関連するデータグリッドからそれを参照します。
WPF datagrodを作成する –