簡體   English   中英

顯示/隱藏WPF用戶控件中的控件

[英]Show/Hide a Control in a WPF User Control

我的用戶控件中有3個按鈕,我想從WPF應用程序或用戶控件中顯示和隱藏一個按鈕 它對我不起作用。 我已經實現了INotifyPropertChanged接口來通知View。 請檢查一下。

<UserControl x:Class="WPFUserControl.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" 
         xmlns:vis="clr-namespace:WPFUserControl"
         d:DesignHeight="300" d:DesignWidth="300">
<UserControl.Resources>
    <vis:BoolToVisibilityConverter x:Key="BoolToVis" ></vis:BoolToVisibilityConverter>
</UserControl.Resources>
<Grid>
    <Button Content="Button1" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75"/>
    <Button Content="Button2" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="106,0,0,0"/>
    <Button Content="ShowHide" Visibility="{Binding IsShowHideVisible, Converter={StaticResource BoolToVis}, ConverterParameter=False}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="75" Margin="215,0,0,0"/>

</Grid>

public partial class UserControl1 : UserControl, INotifyPropertyChanged
{
    private bool isShowHideVisible;
    public bool IsShowHideVisible
    {
        get { return isShowHideVisible; }
        set
        {
            if(isShowHideVisible!=value)
            {
                isShowHideVisible = value;
            }
        }
    }
    public UserControl1()
    {
        InitializeComponent();
       // IsShowHideVisible = false;
    }

    private void OnPropertyChange(string pPropertyName)
    {
        if(PropertyChanged!=null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(pPropertyName));
        }

    }

    public event PropertyChangedEventHandler PropertyChanged;
}

在IsShowHideVisible-Property的設置器中,必須在isShowHideVisible = value;之后isShowHideVisible = value;調用OnPropertyChanged("IsShowHideVisible") isShowHideVisible = value;

然后,您的財產如下所示:

public bool IsShowHideVisible
{
    get { return isShowHideVisible; }
    set
    {
        if(isShowHideVisible!=value)
        {
            isShowHideVisible = value;
            OnPropertyChanged("IsShowHideVisible");
        }
    }
}

如果您使用的是.net 4.5或更高版本,則可以重寫OnPropertyChanged -Method,例如:

private void OnPropertyChange([CallerMemberName]string pPropertyName = null)
{
    if(PropertyChanged!=null)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(pPropertyName));
    }
}

比在您的OnPropertyChanged();您只需要調用OnPropertyChanged(); 而不是OnPropertyChanged("IsShowHideVisible");

在構造函數中添加this.DataContext = this並在set字段中添加OnPropertyChange(“ IsShowHideVisible”)之后,其工作正常。

public partial class UserControl1 : UserControl, INotifyPropertyChanged
{
    private bool isShowHideVisible;
    public bool IsShowHideVisible
    {
        get { return isShowHideVisible; }
        set
        {
            if(isShowHideVisible!=value)
            {
                isShowHideVisible = value;
                OnPropertyChange("IsShowHideVisible");
            }
        }
    }
    public UserControl1()
    {
        InitializeComponent();
        this.DataContext=this;
    }

    private void OnPropertyChange(string pPropertyName)
    {
        if(PropertyChanged!=null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(pPropertyName));
        }
    }
    public event PropertyChangedEventHandler PropertyChanged;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM