单选按钮可以绑定到 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>