عرض الضوابط بناء على زر الراديو المحددة
-
20-08-2019 - |
سؤال
ولدي مجموعة من ثلاثة أزرار. اعتمادا على زر التي الإذاعة محددا، وأريد أن disaply واحد من ثلاثة عناصر تحكم - على النص، قائمة منسدلة، أو زر. كيف يمكنني عرض الضوابط بناء على نتيجة زر الراديو المحددة؟
المحلول
ويمكنك ربط تسليط الضوء على السيطرة على الممتلكات 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>
وتحرير:
<اقتباس فقرة>وهذا الحلول يعمل كبيرة وانها بسيطة لتنفيذ. هل هناك أي حال يمكنني منع عناصر التحكم من يجري مخبأة في وضع التصميم؟
اقتباس فقرة>وأنا لا أعرف عن المصممين الآخرين (مزيج على سبيل المثال)، ولكن في استوديو مصمم البصرية الضوابط مخفية أبدا ...
وعلى أي حال، هل يمكن تنفيذ تحويل الخاص بك، والذي سيعود دائما مرئي في وضع التصميم. لسبب غامض وختم الطبقة 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
}
نصائح أخرى
لإبقاء عنصر مرئية أثناء وقت التصميم يمكنك إضافة FallbackValue
من true
مربع الاختيار على النحو التالي:
<RadioButton x:Name="cbxEmail" Content="Email Details" IsEnabled="{Binding IsEmail, FallbackValue=true}" IsChecked="{Binding IsEmail, Mode=OneWay, FallbackValue=true}"
Grid.Column="2"/>