2011-06-23 57 views

回答

5

看起来你必须将模式属性设置为Original,或者你可以在ZoomControl的Loaded事件处理程序中明确调用ZoomToOriginal

看来EqualityToBooleanConverter会抛出一个异常,当它不应该的时候。代码如下:

public class EqualityToBooleanConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return object.Equals(value, parameter); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     if ((bool)value) 
      return parameter; 

     //it's false, so don't bind it back 
     throw new Exception("EqualityToBooleanConverter: It's false, I won't bind back."); 
    } 
} 

您需要删除该异常并返回Binding.DoNothing,来代替。

那转换器在zoomControl可控制模板使用,就像这样:

<RadioButton Content="1:1" 
    GroupName="rbgZoomMode" 
    IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Mode,Converter={StaticResource equalityConverter},ConverterParameter={x:Static Controls:ZoomControlModes.Original}}" /> 
<RadioButton Content="Fill" 
    GroupName="rbgZoomMode" 
    IsChecked="{Binding RelativeSource={RelativeSource TemplatedParent},Path=Mode,Converter={StaticResource equalityConverter},ConverterParameter={x:Static Controls:ZoomControlModes.Fill}}" /> 

那么有效,它试图只有当值为true绑定回源。但是它会引发一个异常,就像你所看到的那样。

+0

试过了。也许它不工作,因为ZoomControl的内容正在改变? –

+0

@Brian - 它看起来像在OnApplyTemplate中调用ZoomToFill,因此您需要在Loaded事件处理函数中调用ZoomToOriginal。 – CodeNaked

+0

我为ZoomControl的Loaded事件添加了一个事件处理程序,并在处理程序中调用了ZoomToOriginal。然而,它会抛出一个异常消息“EqualityToBooleanConverter:它是假的,我不会绑定回来。”任何想法是什么? –