0

MVVM アーキテクチャを使用して WPF アプリケーションを作成しています。サイトごとに、データベースは前景と背景色の値を保持し、データベースからのマッピングで、それらの色に対応する System.Windows.Media.Brush の 2 つの新しいインスタンスを作成します。

ビューモデルは、選択したサイトを次のようにラップします。

public Brush TextBrush
{
    get
    {
        if (StudyCentre == null)
        {
            return _defaultText;
        }
        return StudyCentre.TextColour;
    }
}

また、エラーに関連する可能性があると思われる検証エラーのスタイルも定義しています。

<Style x:Key="errorStyle" TargetType="TextBlock">
    <Setter Property="FontStyle" Value="Italic" />
    <Setter Property="Foreground" Value="Red" />
    <Setter Property="HorizontalAlignment" Value="Right" />
    <Setter Property="Margin" Value="0,1" />
</Style>
<DataTemplate DataType="{x:Type ValidationError}">
    <TextBlock Style="{StaticResource errorStyle}" Text="{Binding Path=ErrorContent}" />
</DataTemplate>

前景色を次のように設定します。

<Style TargetType="TextBlock" >
    <Setter Property="Foreground" Value="{Binding Path=TextBrush, Mode=OneWay}" />
</Style>

ただし、出力は次のエラーでいっぱいです (つまり、検証 contentcontrol ごとに 1 つ考えられます)。

System.Windows.Data Error: 40 : BindingExpression path error: 'TextBrush' property not found on 'object' ''ValidationError' (HashCode=26199139)'. BindingExpression:Path=TextBrush; DataItem='ValidationError' (HashCode=26199139); target element is 'TextBlock' (Name=''); target property is 'Foreground' (type 'Brush')

ページは問題なく表示されますが (エラー コンテンツ コントロール内のテキスト ブロックに前景色を適用したくありません)、このバインディング エラーを回避したいと考えています。

名前付きスタイルに頼らずにテキストボックスに適用しながら、エラーコンテンツコントロールを除外する方法はありますか? ありがとう。

4

1 に答える 1

1

出力ウィンドウからそのエントリを削除できるとは思いませんが、有効な を設定することで a から aに「ダウングレード」できます。System.Windows.Data ErrorSystem.Windows.Data WarningFallbackValue

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="Foreground" 
        Value="{Binding Path=TextBrush, FallbackValue=Black}" />
</Style>
于 2013-11-13T13:44:42.667 に答える