如何从主窗口隐藏用户控件中的按钮

本文关键字:控件 按钮 用户 隐藏 窗口 | 更新日期: 2023-09-27 18:22:16

我有一个有多个按钮的用户控件,在应用程序中,我在多个窗口上使用这个用户控件,但如果用户在应用程序选择窗口1,我想折叠(显示/隐藏)一些按钮,如果用户在应用程序中选择窗口2,我想显示相同的按钮

用户控制

<Grid x:Name="girdBtuWidow" >
    <StackPanel Orientation="Horizontal">
        <Button Content="add" x:Name="add" Visibility="{Binding window1_Loaded}" x:FieldModifier="public" Height="50"  Width="100" Margin="0"  Click="add_click"  />
        <Button Content="show history" x:Name="Personal" Height="50"  Width="100" Margin="0" />
        <Button Content="Show Customer" x:Name="Customer" Height="50"  Width="100" Margin="0" />
    </StackPanel>
</Grid>

如何从应用程序窗口设置用户控件中按钮的属性(可见性)?

如何从主窗口隐藏用户控件中的按钮

您不需要在此处使用Window_Loaded事件。

您需要为UserControls中的每个按钮公开一个Visibility属性。

UserControl中,为Visibility属性的每个按钮添加一个绑定:

Visibility="{Binding AddButtonVisibility}"
Visibility="{Binding ShowHistoryButtonVisibility}"
Visibility="{Binding ShowCustomerButtonVisibility}"

确保在UserControl中添加DataContext,我通常使用Self:

DataContext="{Binding RelativeSource={RelativeSource Self}}"

UserControl代码隐藏中,为上面的每个绑定添加依赖属性:

    public Visibility AddButtonVisibility
    {
        get { return (Visibility)GetValue(AddButtonVisibilityProperty); }
        set { SetValue(AddButtonVisibilityProperty, value); }
    }
    // Using a DependencyProperty as the backing store for AddButtonVisibility.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty AddButtonVisibilityProperty =
        DependencyProperty.Register("AddButtonVisibility", typeof(Visibility), typeof(UserControl1), new PropertyMetadata(Visibility.Visible));

    public Visibility ShowHistoryButtonVisibility
    {
        get { return (Visibility)GetValue(ShowHistoryButtonVisibilityProperty); }
        set { SetValue(ShowHistoryButtonVisibilityProperty, value); }
    }
    // Using a DependencyProperty as the backing store for ShowHistoryButtonVisibility.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ShowHistoryButtonVisibilityProperty =
        DependencyProperty.Register("ShowHistoryButtonVisibility", typeof(Visibility), typeof(UserControl1), new PropertyMetadata(Visibility.Visible));

    public Visibility ShowCustomerButtonVisibility
    {
        get { return (Visibility)GetValue(ShowCustomerButtonVisibilityProperty); }
        set { SetValue(ShowCustomerButtonVisibilityProperty, value); }
    }
    // Using a DependencyProperty as the backing store for ShowCustomerButtonVisibility.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty ShowCustomerButtonVisibilityProperty =
        DependencyProperty.Register("ShowCustomerButtonVisibility", typeof(Visibility), typeof(UserControl1), new PropertyMetadata(Visibility.Visible));

在Visual Studio中,有一个用于依赖项属性的代码段快捷方式—键入propdp并按两次tab

现在,要使用您刚刚创建的属性,请将Usercontrol放到相关窗口上:

<local:UserControl1 AddButtonVisibility="Collapsed" />

local是在Window顶部定义的项目名称空间的别名。您只需将UserControl拖放到您的窗口上,它就会为您完成此操作。(您可能需要重建才能在工具箱中看到您的UserControls

现在,您应该可以看到Add Button崩溃时的控件。

为了完整起见,这里是事物的XAML方面:

UserControl Xaml:

<UserControl x:Class="WpfApplication2.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300"
         DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid x:Name="girdBtuWidow" >
    <StackPanel Orientation="Horizontal">
        <Button Content="Add" x:Name="add" Height="50"  Width="100" Margin="0" Click="Add_Click" Visibility="{Binding AddButtonVisibility}"/>
        <Button Content="Show History" x:Name="Personal" Height="50"  Width="100" Margin="0" Click="ShowHistory_Click" Visibility="{Binding ShowHistoryButtonVisibility}" />
        <Button Content="Show Customer" x:Name="Customer" Height="50"  Width="100" Margin="0" Click="ShowCustomer_Click" Visibility="{Binding ShowCustomerButtonVisibility}"/>
    </StackPanel>
</Grid>

窗口1.Xaml:

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication2" x:Class="WpfApplication2.Window1"
    Title="Window1" Height="300" Width="308">
<Grid>
    <local:UserControl1 HorizontalAlignment="Left" VerticalAlignment="Top" AddButtonVisibility="Collapsed" />
</Grid>

public static readonly DependencyProperty onBackVisibilityProperty =
     DependencyProperty.Register("onBackVisibility", typeof(Visibility), typeof(MyToolBar), new PropertyMetadata(Visibility.Visible));
    public Visibility onBackVisibility
    {
        get { return (Visibility)GetValue(onBackVisibilityProperty); }
        set { SetValue(onBackVisibilityProperty, value); }
    }

public static readonly DependencyProperty onBackVisibilityProperty =
     DependencyProperty.Register("onBackVisibility", typeof(Visibility), typeof(MyToolBar), new PropertyMetadata(Visibility.Visible));
    public Visibility onBackVisibility
    {
        get { return (Visibility)GetValue(onBackVisibilityProperty); }
        set { SetValue(onBackVisibilityProperty, value); }
    }

//在这个goto-xaml 之后

Button Name="tbrBack" 
ToolTip="{DynamicResource Back}" 
VerticalAlignment="Center" 
VerticalContentAlignment="Center" 
Click="tbrBack_Click" 
Visibility="{Binding onBackVisibility ,ElementName = usercontrol}