单选按钮可以绑定到 XAML 中的附加行为吗?
Can radio buttons be bound to an attached behavior in XAML?
在 XAML 中,我有一组单选按钮:
<RadioButton Width="25"
Height="25"
Foreground="Blue"
IsChecked="{Binding ??????, Converter={StaticResource StrokeTypeConverter}, ConverterParameter="Ellipse}"
GroupName="StrokeTypeGroup" />
"StylusTypeGroup" 的每个单选按钮的目的是允许选择 "Ellipse" 、 "Line" 或 "Rectangle" 自定义笔划等...
在 XAML 的更下方,我有一个与 InkCanvas 相关的行为,例如:
<InkCanvas x:Name="MainInkCanvas"
Grid.Column="1"
Grid.Row="1"
Background="Transparent"
DefaultDrawingAttributes="{Binding CurrentPen.Pen}"
EditingMode="{Binding EditingMode}">
<i:Interaction.Behaviors>
<b:MainInkCanvasBehavior CustomStrokeType = "{Binding???????}" />
</i:Interaction.Behaviors>
有没有办法只使用 XAML 代码 来绑定检查(多个)单选按钮中的任何一个的结果直接 到 MainInkCanvasBehavior 行为 的 CustomStrokeType 依赖项 属性?或者我是否被迫绑定到视图模型上的 属性(作为一种控股 属性)?
TIA
最省力的方法是创建一个新的 属性、CheckedRadioButtonID,将其绑定到您的 CustomStrokeType 并使用 IValueConverter 获取一个 int 和 return 一个 Stroke。关键是当单击单选按钮时,您还想为 CheckedRadioButtonID 引发 INotifyPropertyEvent。
public int CheckedRadioButtonID
{
get
{
if(IsAChecked) return 1;
/// ...
}
// returns 1,2,3... (number of radio buttons you have)
// Implements INotifyPropertyChanged
}
public bool IsAChecked
{
set
{
// when this is set... also raise CheckedRadioButtonID property changed
}
}
在 XAML 中绑定到 CheckedRadioButtonID 并让 IValueConverter 接受一个 int 和 return 一个 Stroke。
如果你真的想使用 MultiValueConverter,它会像这样
<b:MainInkCanvasBehavior >
<b:MainInkCanvasBehavior.CustomStrokeType>
<MultiBinding Converter="{StaticResource MultiValueConverterThatReturnsStroke}">
<Binding ElementName="RadioButton1" Path="IsChecked"></Binding>
<Binding ElementName="RadioButton2" Path="IsChecked"></Binding>
</MultiBinding>
</b:MainInkCanvasBehavior.CustomStrokeType>
</b:MainInkCanvasBehavior>
在 XAML 中,我有一组单选按钮:
<RadioButton Width="25"
Height="25"
Foreground="Blue"
IsChecked="{Binding ??????, Converter={StaticResource StrokeTypeConverter}, ConverterParameter="Ellipse}"
GroupName="StrokeTypeGroup" />
"StylusTypeGroup" 的每个单选按钮的目的是允许选择 "Ellipse" 、 "Line" 或 "Rectangle" 自定义笔划等...
在 XAML 的更下方,我有一个与 InkCanvas 相关的行为,例如:
<InkCanvas x:Name="MainInkCanvas"
Grid.Column="1"
Grid.Row="1"
Background="Transparent"
DefaultDrawingAttributes="{Binding CurrentPen.Pen}"
EditingMode="{Binding EditingMode}">
<i:Interaction.Behaviors>
<b:MainInkCanvasBehavior CustomStrokeType = "{Binding???????}" />
</i:Interaction.Behaviors>
有没有办法只使用 XAML 代码 来绑定检查(多个)单选按钮中的任何一个的结果直接 到 MainInkCanvasBehavior 行为 的 CustomStrokeType 依赖项 属性?或者我是否被迫绑定到视图模型上的 属性(作为一种控股 属性)?
TIA
最省力的方法是创建一个新的 属性、CheckedRadioButtonID,将其绑定到您的 CustomStrokeType 并使用 IValueConverter 获取一个 int 和 return 一个 Stroke。关键是当单击单选按钮时,您还想为 CheckedRadioButtonID 引发 INotifyPropertyEvent。
public int CheckedRadioButtonID
{
get
{
if(IsAChecked) return 1;
/// ...
}
// returns 1,2,3... (number of radio buttons you have)
// Implements INotifyPropertyChanged
}
public bool IsAChecked
{
set
{
// when this is set... also raise CheckedRadioButtonID property changed
}
}
在 XAML 中绑定到 CheckedRadioButtonID 并让 IValueConverter 接受一个 int 和 return 一个 Stroke。
如果你真的想使用 MultiValueConverter,它会像这样
<b:MainInkCanvasBehavior >
<b:MainInkCanvasBehavior.CustomStrokeType>
<MultiBinding Converter="{StaticResource MultiValueConverterThatReturnsStroke}">
<Binding ElementName="RadioButton1" Path="IsChecked"></Binding>
<Binding ElementName="RadioButton2" Path="IsChecked"></Binding>
</MultiBinding>
</b:MainInkCanvasBehavior.CustomStrokeType>
</b:MainInkCanvasBehavior>