在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依赖项属性的行为?或者我被迫绑定到viewmodel上的属性(作为一种持有属性)?
TIA
答案 0 :(得分:1)
最少的工作是创建一个新属性CheckedRadioButtonID,将其绑定到CustomStrokeType并使用IValueConverter获取int并返回一个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并返回一个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>