单选按钮是否可以绑定到XAML中的附加行为?

时间:2017-06-05 19:01:33

标签: wpf xaml attachedbehaviors

在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

1 个答案:

答案 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>