Как скрыть / отключить один элемент управления TextBlock из WPF usercontrol?
У меня есть кнопка Toggle с заголовком, я создал UserControl ToggleSwitch.xaml, чтобы я мог использовать их на нескольких страницах. Все идет идеально.
Но на одной странице мне нужно показать кнопку переключателя в DataGrid, чтобы пользователь мог изменить состояние, но при использовании ToggleSwitch UserControl TextBox также занимает немного места, что делает мой дизайн очень плохим.
Я просто хочу показать кнопку ToggleSwitch на DataGrid, а не TextBox с некоторым текстом.
Я хочу скрыть TextBox, чтобы не влиять на мой дизайн.
Спасибо, если кто-то может помочь, Вы можете увидеть фрагмент кода ниже.
<StackPanel Orientation="Horizontal" x:Name="LayoutRoot" Margin="0,0,-23,0">
<ToggleButton Name="toggleButton" VerticalAlignment="Center" Click="ToggleButton_OnClick" IsChecked="{Binding Path=StateChecked}" Cursor="Hand" Style="{DynamicResource AnimatedSwitch}" Height="13" Width="23" Margin="0,0,0,0" />
<TextBlock Name="tbText" Text="{Binding Path=ControlText}" VerticalAlignment="Center" Width="279" Margin="15,8,0,7"></TextBlock>
</StackPanel>
1 ответ
Вы можете добиться этого, используя Dependency Properties
, Привязать видимость вашего текстового поля к свойству зависимости в пользовательском элементе управления.
Сначала создайте свойство зависимости следующим образом:
public Visibility TextBlockVisibilityProperty
{
get { return (Visibility)GetValue(TextBlockVisibilityPropertyProperty); }
set { SetValue(TextBlockVisibilityPropertyProperty, value); }
}
// Using a DependencyProperty as the backing store for TextBlockVisibilityProperty. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TextBlockVisibilityPropertyProperty =
DependencyProperty.Register("TextBlockVisibilityProperty", typeof(Visibility), typeof(MaintenancePage), new PropertyMetadata(0));
Затем в XAML связать свойство textblock
видимость как ниже
<StackPanel Orientation="Horizontal" x:Name="LayoutRoot" Margin="0,0,-23,0">
<ToggleButton Name="toggleButton" VerticalAlignment="Center" Click="ToggleButton_OnClick" IsChecked="{Binding Path=StateChecked}" Cursor="Hand" Style="{DynamicResource AnimatedSwitch}" Height="13" Width="23" Margin="0,0,0,0" />
<TextBlock Name="tbText" Text="{Binding Path=ControlText}" VerticalAlignment="Center" Width="279" Margin="15,8,0,7" Visibility="{Binding TextBlockVisibilityProperty}"></TextBlock>
</StackPanel>
Теперь при повторном использовании элемента управления в xaml установите TextBlockVisibilityProperty
при определении управления по мере необходимости. Это скроет textblock
,