2011-06-23 56 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:它是假的,我不會綁定回來。」任何想法是什麼? –