[英]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.