2008-10-30 110 views
5

TextBox的TextWrapping屬性有三種可能的值:如何將TextBox的TextWrapping屬性綁定到MenuItem的IsChecked值?

  • NoWrap的
  • WrapWithOverflow

我想綁定到一個菜單項的財產器isChecked。如果MenuItem被選中,我想將TextBox的TextWrapping屬性設置爲Wrap。如果沒有選中MenuItem,我想將TextBox的TextWrapping屬性設置爲NoWrap。

總結一下,我試圖將具有兩個狀態的控件綁定到具有兩個以上值的枚舉的兩個值。

如果可能,我想在XAML中完成此操作。

我想出瞭如何使用IValueConverter來做到這一點。也許有更好的方法來做到這一點?這是我做的:


在Window.Resources中,我聲明瞭對我的ValueConverter的引用。

<local:Boolean2TextWrapping x:Key="Boolean2TextWrapping" /> 

在我的TextBox中,我創建了一個MenuItem的綁定,並在綁定語句中包含了Converter。

TextWrapping="{Binding ElementName=MenuItemWordWrap, Path=IsChecked, Converter={StaticResource Boolean2TextWrapping}}" 

和ValueConverter看起來是這樣的:

+0

我想在SL 4中做同樣的事情,但我的轉換器永遠不會被調用。 xaml與您的相同... – Number8 2011-03-18 13:54:04

回答

9

如果你想在xaml中完成這一切,你需要使用StyleDataTrigger

<StackPanel> 
    <CheckBox x:Name="WordWrap">Word Wrap</CheckBox> 
    <TextBlock Width="50"> 
     Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin lacinia nibh non augue. Pellentesque pretium neque et neque auctor adipiscing. 

     <TextBlock.Style> 
      <Style TargetType="{x:Type TextBlock}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding IsChecked, ElementName=WordWrap}" Value="True"> 
         <Setter Property="TextWrapping" Value="Wrap" /> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </TextBlock.Style> 
    </TextBlock> 
</StackPanel> 
+0

當IsChecked爲False時,TextBox如何知道切換到NoWrap?它的作品 - 但我不明白爲什麼。是因爲TextBox上的TextWrapping具有默認值還是其他值? – 2008-10-31 16:20:38

-1

我假設你正在談論.NET。我不認爲數據綁定會在這裏工作,因爲值不是相同的類型(布爾vs enum)。最簡單的解決方案是處理該菜單項的CheckedChanged事件,並相應地調整文本框的換行模式。

+0

錯誤。它可以在xaml中完成。 – Will 2008-10-30 17:08:43

0

我認爲 唯一的和正確的 這樣做的典型方法是使用像您已經完成的值轉換器。

有時您可以找到您已經創建的現有值轉換器......或者甚至是微軟爲您創建的更好的轉換器。例如,在System.Windows.Controls中,Microsoft編寫了一個BooleanToVisibilityConverter ...它將bool轉換爲Visibility枚舉...將True轉換爲Visible並將False轉換爲Collapsed(而不用擔心隱藏)。

一個想法是使用.NET Reflector,導航到System.Windows.Data.IValueConverter,然後使用分析功能(特別是'使用'),看看有什麼事情已經實現了IValueConverter ...和你可能會很幸運找到適合你的目的的轉換器。

在相關說明中,BooleanToVisibilityConverter與您在上面嘗試執行的操作非常相似。

編輯: 我真的很喜歡託德懷特的建議風格的文本框和風格的DataTrigger。如果你想避免一個轉換器,這是一個非常好的主意。

相關問題