bool の状態、この場合はチェックボックスの状態に応じて、WPF コントロールの色を変更したいと考えています。StaticResources を使用している限り、これは正常に機能します。
私のコントロール
<TextBox Name="WarnStatusBox" TextWrapping="Wrap" Style="{DynamicResource StatusTextBox}" Width="72" Height="50" Background="{Binding ElementName=WarnStatusSource, Path=IsChecked, Converter={StaticResource BoolToWarningConverter}, ConverterParameter={RelativeSource self}}">Status</TextBox>
私のコンバーター:
[ValueConversion(typeof(bool), typeof(Brush))]
public class BoolToWarningConverter : IValueConverter
{
public FrameworkElement FrameElem = new FrameworkElement();
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
bool state = (bool)value;
try
{
if (state == true)
return (FrameElem.TryFindResource("WarningColor") as Brush);
else
return (Brushes.Transparent);
}
catch (ResourceReferenceKeyNotFoundException)
{
return new SolidColorBrush(Colors.LightGray);
}
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
return null;
}
}
問題は、昼モードまたは夜モードの設定に依存するリソース「WarningColor」の定義がいくつかあることです。これらのイベントは、WarningColor の変更をトリガーしません。戻り値を動的にする方法はありますか、それとも設計を再考する必要がありますか?