我使用 IValueConverter 设置一个复选框。\n但是我有三个复选框,并且我像 RadioButton 一样使用。选择其中一项后,需要取消选中其他项。
\n\n所以我做了类似的事情>
\n\n<MenuItem StaysOpenOnClick="True" \n Header="Reiniciar \xc3\xa1udio"\n IsCheckable="True"\n Name="RestartAudioCheck" \n IsChecked="{Binding PlayType, \n Mode=TwoWay,\n Converter={StaticResource PlayTypeCheckedConverter},\n ConverterParameter=restart}">\n</MenuItem>\n<MenuItem StaysOpenOnClick="True" \n Header="Parar \xc3\xa1udio"\n IsCheckable="True"\n Name="StopAudioCheck"\n IsChecked="{Binding PlayType, \n Mode=TwoWay,\n Converter={StaticResource PlayTypeCheckedConverter},\n ConverterParameter=stop}">\n</MenuItem>\n<MenuItem StaysOpenOnClick="True" \n Header="Pausar \xc3\xa1udio"\n IsCheckable="True"\n Name="PauseAudioCheck"\n IsChecked="{Binding PlayType, \n Mode=TwoWay,\n Converter={StaticResource PlayTypeCheckedConverter},\n ConverterParameter=pause}">\n</MenuItem>\nRun Code Online (Sandbox Code Playgroud)\n\n和转换器:
\n\nclass PlayTypeCheckedConverter : IValueConverter\n{\n public object Convert(object value, Type targetType, object parameter, CultureInfo culture)\n {\n if (!(value is PlayType type))\n return false;\n\n if (!(parameter is string check))\n return false;\n\n if (check.CompareTo("restart") == 0 && type == PlayType.Restart)\n return true;\n if (check.CompareTo("stop") == 0 && type == PlayType.Stop)\n return true;\n if (check.CompareTo("pause") == 0 && type == PlayType.Pause)\n return true;\n\n return false;\n }\n\n public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)\n {\n if (!(value is bool isChecked))\n return true;\n\n if (!(parameter is string type))\n return PlayType.Restart;\n\n if (type.CompareTo("restart") == 0 && isChecked)\n return PlayType.Restart;\n if (type.CompareTo("stop") == 0 && isChecked)\n return PlayType.Stop;\n if (type.CompareTo("pause") == 0 && isChecked)\n return PlayType.Pause;\n\n return PlayType.Restart;\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我的问题是:传递像绝对文本这样的 ConverterParameter 作为示例来了解转换器上的某些内容是错误的吗?\n就像我做的那样,效果很好。
\n对于任何属性类型都可以有一个等式转换器。使用它的技巧是传递特定类型的参数,而不是字符串表示形式。
转换器:
public class EqualityCheckConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Equals(value, parameter);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (Equals(value, true))
return parameter;
return Binding.DoNothing;
}
}
Run Code Online (Sandbox Code Playgroud)
示例enum:
// property to bind
public DayOfWeek Day { get; set; }
Run Code Online (Sandbox Code Playgroud)
捆绑:
<Window.Resources>
<wpfDemos:EqualityCheckConverter x:Key="EqualCheckedConverter"/>
</Window.Resources>
<Menu>
<MenuItem StaysOpenOnClick="True"
Header="Tuesday"
IsCheckable="True"
IsChecked="{Binding Day,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={x:Static system:DayOfWeek.Tuesday}}"/>
<MenuItem StaysOpenOnClick="True"
Header="Wednesday"
IsCheckable="True"
IsChecked="{Binding Day,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={x:Static system:DayOfWeek.Wednesday}}"/>
<MenuItem StaysOpenOnClick="True"
Header="Thursday"
IsCheckable="True"
IsChecked="{Binding Day,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={x:Static system:DayOfWeek.Thursday}}"/>
</Menu>
Run Code Online (Sandbox Code Playgroud)
示例与int
public int TestNum { get; set; }
Run Code Online (Sandbox Code Playgroud)
<Window.Resources>
<wpfDemos:EqualityCheckConverter x:Key="EqualCheckedConverter"/>
<system:Int32 x:Key="Zero">0</system:Int32>
<system:Int32 x:Key="Ten">10</system:Int32>
</Window.Resources>
<Menu>
<MenuItem StaysOpenOnClick="True"
Header="0"
IsCheckable="True"
IsChecked="{Binding TestNum,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={StaticResource Zero}}"/>
<MenuItem StaysOpenOnClick="True"
Header="10"
IsCheckable="True"
IsChecked="{Binding TestNum,
Mode=TwoWay,
Converter={StaticResource EqualCheckedConverter},
ConverterParameter={StaticResource Ten}}"/>
</Menu>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1200 次 |
| 最近记录: |