2009-06-25 81 views

回答

15

您可以將控件綁定到的單選按鈕的器isChecked財產的知名度,使用BooleanToVisibilityConverter

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Page.Resources> 
    <BooleanToVisibilityConverter x:Key="convVisibility"/> 
    </Page.Resources> 
    <Grid> 
    <StackPanel Orientation="Vertical"> 
     <RadioButton Name="radioButton1" GroupName="group1">Control1</RadioButton> 
     <RadioButton Name="radioButton2" GroupName="group1">Control2</RadioButton> 
     <RadioButton Name="radioButton3" GroupName="group1">Control3</RadioButton> 
     <Grid> 
     <Button Visibility="{Binding IsChecked, ElementName=radioButton1, Converter={StaticResource convVisibility}}">1. Button</Button> 
     <TextBlock Visibility="{Binding IsChecked, ElementName=radioButton2, Converter={StaticResource convVisibility}}">2. TextBlock</TextBlock> 
     <TextBox Visibility="{Binding IsChecked, ElementName=radioButton3, Converter={StaticResource convVisibility}}">3. TextBox</TextBox> 
     </Grid> 
    </StackPanel> 
    </Grid> 
</Page> 

編輯:

這解決方案的偉大工程,這是很容易實現。無論如何,我可以阻止控件在設計模式下隱藏嗎?

我不知道其他設計師(混合爲例),但在Visual Studio設計的控制是從來沒有隱瞞過......

不管怎麼說,你可以實現自己的轉換器,它總是會返回在設計模式下可見。由於某些不明確的原因,BooleanToVisibilityConverter類是封閉的,所以你不能繼承它。您可以委託轉換爲BooleanToVisibilityConverter相反,如果你不希望重寫轉換邏輯:

public class MyBooleanToVisibilityConverter : IValueConverter 
{ 
    private BooleanToVisibilityConverter _converter = new BooleanToVisibilityConverter(); 
    private DependencyObject _dummy = new DependencyObject(); 

    private bool DesignMode 
    { 
     get 
     { 
      return DesignerProperties.GetIsInDesignMode(_dummy); 
     } 
    } 

    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     if (DesignMode) 
      return Visibility.Visible; 
     else 
      return _converter.Convert(value, targetType, parameter, culture); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     return _converter.ConvertBack(value, targetType, parameter, culture); 
    } 

    #endregion 
} 
+0

該解決方案效果很好,實施起來很簡單。無論如何,我可以阻止控件在設計模式下隱藏嗎? – DenaliHardtail 2009-06-25 21:00:36

1

爲了使組件在設計時可見,你可以在複選框trueFallbackValue添加爲:

<RadioButton x:Name="cbxEmail" Content="Email Details" IsEnabled="{Binding IsEmail, FallbackValue=true}" IsChecked="{Binding IsEmail, Mode=OneWay, FallbackValue=true}" 
           Grid.Column="2"/>