如何从WPF usercontrol隐藏/禁用一个TextBlock控件?

时间:2016-08-05 04:52:59

标签: wpf wpf-controls wpfdatagrid

我有一个带标题的Toggle按钮,我创建了ToggleSwitch.xaml UserControl,以便我可以在多个页面中使用它们。每件事情都很完美。

但在一个页面中,我需要在DataGrid中显示切换开关按钮,以便用户可以更改状态,但在使用时ToggleSwitch UserControl TextBox也需要一些空间,使我的设计看起来非常糟糕。

我只想在DataGrid上显示ToggleSwitch按钮,而不是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 个答案:

答案 0 :(得分: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