簡體   English   中英

WPF自定義控件

[英]WPF Custom Controls

我一直在努力嘗試解決這個問題。

故事:我有一個MainWindow和2個用戶控件。 MainWindow加載時,一個控件可見,而另一個控件不可見。 用戶輸入數據和設置后,我需要使其他表單可見。

需要初始化啟動時不可見的表單,因為它是從運行它的計算機的WMI收集數據。 它還在收集AD信息,為用戶做准備。

由於某種原因,我無法獲得一種形式來展示另一種形式。

我認為這是我應該查看的內容:

#region Class Variable
    public string ShowSideBar { get { return (String)GetValue(VisibilityProperty); } set { SetValue(VisibilityProperty, value); }}
    public DependencyProperty VisibilityProperty = DependencyProperty.Register("ShowSideBar", typeof(string), typeof(UserControl), null);
    #endregion

這是在我的MainWindow類中設置的,但是,我不知道為什么不能從任何其他用戶控件調用它。

有什么辦法可以從MainWindow中向所有表單公開這樣的內容?

public int RowSpan {
   get { return Grid.GetRowSpan(DockPanel1); }
   set {  Grid.SetRowSpan(DockPanel1,value); }
}

依賴項屬性必須是靜態的。 為什么是string類型? 如果它不Visibility ,如果你想在控制它的知名度綁定?

它必須是依賴項屬性嗎? 您也可以只使用常規屬性並實現INotifyPropertyChanged ,因為您沒有將此字段綁定到任何東西,而是將其他東西綁定到了

對於依賴項屬性,請嘗試以下類似方法:

public static readonly DependencyProperty SideBarVisibilityProperty = DependencyProperty.Register("SideBarVisibility", typeof(Visibility), typeof(MyTemplatedControl), null);
public Visibility SideBarVisibility
{
    get { return (Visibility)GetValue(SideBarVisibilityProperty); }
    set { SetValue(SideBarVisibilityProperty, value); }
}

首先,該應用將從MVVM模式的應用中受益

但是, 如果不采用這種方法 ,您仍然可以解決所遇到的問題。 用戶控件依賴於其父控件是什么是不尋常的。 主窗口后面的代碼將是放置此代碼的更好位置。 (不如視圖模型好……但這是另一個故事。)

添加到應該使邊欄可見的事件ShowSideBar 在主窗口中附加一個處理程序,並使用該處理程序顯示第二個控件。 這里根本不需要依賴屬性。

public class MyControl : UserControl
{
    ...
    public event EventHandler ShowSideBar;

    // Call this method when you need to show the side bar.
    public void OnShowSideBar()
    {
        var s = this.ShowSideBar;
        if (s != null)
        {
            s(this, EventArgs.Empty);
        }
    }
}

public class MainWindow : Window
{
    public MainWindow()
    {
        this.InitializeComponent();
        this.FirstControl.ShowSideBar += (s, e) =>
        {
            this.SecondControl.Visibility = Visibility.Visible;
        }
    }
}

我修復了初始化的組件,但進行了更改。

X:Class =“ AdminTools.MainWindow.ShowSideBar”轉換為x:Class =“ AdminTools.MainWindow”。

現在我有一個問題

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:User="clr-namespace:AdminTools.Controls.User"
        xmlns:Custom="clr-namespace:AdminTools.Controls.Custom"
        xmlns:Bindings="clr-namespace:AdminTools.Functions"
        x:Class="AdminTools.MainWindow"
        Title="MainWindow" Height="691.899" Width="1500"

    >
    <Window.DataContext>
        <Bindings:ShowSideBar />
    </Window.DataContext>

<Bindings:ShowSideBar /> = ShowSideBar does not exist in the namespace clr-namespace:AdminTools.Functions

ShowSideBar:成員名稱不能與其封閉類型相同。

暫無
暫無

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

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