c# - 多重绑定,转换器和设置器:意外错误
问题描述
我正在尝试对 WPF 中的按钮使用多重绑定样式,但出现了一个尴尬的错误: System.ArgumentException : ''System.Drawing.SolidBrush' n'est pas une valeur valide pour la propriété 'System.Windows.Controls。 Panel.Background 'd'une 方法 Setter。
然而,我正在将我的设置器应用于 Button.BackgroundProperty...
这是多重绑定:
<Button
Height="20"
Margin="2,0,2,2"
VerticalAlignment="Bottom"
Click="Btn_summary_OnClick"
Content="Résumé"
Name="btn_summary">
<Button.Style>
<MultiBinding Converter="{StaticResource StyleConverter1}">
<Binding ElementName="listBoxBooks" Path="SelectedItem" />
<Binding Source="{StaticResource bookManagement}" Path="SelectedTab" Mode="OneWay"/>
<Binding RelativeSource="{RelativeSource Self}" Path="Name"/>
</MultiBinding>
</Button.Style>
</Button>
和转换器:
public class StyleConverter1 : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
Style styleToApply = new Style(typeof(Button));
Object selectedItem = values[0];
if (selectedItem == null)
{
styleToApply.Setters.Add(new Setter(Button.IsEnabledProperty, false));
return styleToApply;
}
styleToApply.Setters.Add(new Setter(Button.IsEnabledProperty, true));
string selectedTab = values[1] as string;
if (selectedTab == null)
{
return styleToApply;
}
string buttonName = values[2] as string;
if ((selectedTab.Equals("summary") && buttonName.Equals("btn_summary"))
|| (selectedTab.Equals("end") && buttonName.Equals("btn_end"))
|| (selectedTab.Equals("amazon") && buttonName.Equals("btn_amazon"))
)
{
styleToApply.Setters.Add(new Setter(Button.BackgroundProperty,Brushes.Yellow));
styleToApply.Setters.Add(new Setter(Button.ForegroundProperty, Brushes.RoyalBlue));
}
else
{
styleToApply.Setters.Add(new Setter(Button.ForegroundProperty, Brushes.Yellow));
styleToApply.Setters.Add(new Setter(Button.BackgroundProperty, Brushes.RoyalBlue));
}
return styleToApply;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我不明白为什么 VS 要将我的设置器应用于面板。
谢谢你
解决方案
System.Drawing
是 Winforms 的命名空间。删除它并替换为 WPF 等效项System.Windows.Media
,然后您将使用正确的Brushes
类。
推荐阅读
- elixir - 返回结构时编写文档测试
- android - 在工具栏下的片段中折叠布局
- apache-spark - Spark 2.3.1 结构化流状态存储内部工作
- android - 为 Android 创建一个转弯导航应用程序
- java - 具有定义的匿名类实例化 - 覆盖受保护的方法
- java - 为什么HashMap(JDK1.8)中hash的计算不需要像ConcurrentHashMap那样考虑负hashCode?
- shopware - Shopware 在会话超时时清除购物车并重定向到注册页面
- angular - 正确使用 Angular 6 ReplaySubject 进行缓存 - 观察者长度不断增长
- javascript - Javascript 根据特定列属性将数组重塑为新数组
- c++ - 哪个函数与 Mac OS X 上的“pthread_rwlock_timedrdlock()”和“pthread_rwlock_timedwrlock()”等价?