2016-08-05 6 views
0

У меня есть кнопка Toggle с заголовком, я создал UserGontrol ToggleSwitch.xaml, чтобы я мог использовать их на нескольких страницах. Все идет идеально.Как скрыть/отключить один элемент управления TextBlock из пользовательского контроля WPF?

Но на одной странице мне нужно показать кнопку переключения тумблера в 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> 
+0

Возможно, вы могли бы добавить логический элемент в свой пользовательский элемент управления, и когда он будет помечен, он скроет ваше текстовое поле. –

+0

Не могли бы вы подробнее рассказать @DarkTemplar? –

+0

Мне нужно увидеть xaml вашего пользовательского элемента управления, и я напишу пример. –

ответ

0

Вы можете достичь этого, используя 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.