在此之前,我對以下詳細問題表示歉意。由於我是WPF的新手,我決定解釋更多,以便獲得更多提示!如何使用模板成員屬性
我有一個用戶控件,如:
<UserControl x:Class="MyNamespace.MyUserControl2"...
xmlns:local="clr-namespace:MyNamespace"
Style="{DynamicResource ResourceKey=style1}">
<UserControl.Resources>
<Style x:Key="style1" TargetType="{x:Type UserControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type UserControl}">
...
<local:MyUserControl1 x:Name="myUserControl1" .../>
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</UserControl.Resources>
</UserControl>
要從代碼中訪問到myUserControl1
後面,我用了一個屬性。
private MyUserControl1 _myUserControl1;
private MyUserControl1 myUserControl1
{
get
{
if (_myUserControl1 == null)
_myUserControl1 = this.Template.FindName("myUserControl1", this) as MyUserControl1;
return _myUserControl1;
}
}
(這是訪問一個模板成員的好方法嗎?)
在另一方面,有一個依賴屬性在MyUserControl2
類(比如DP1
)是負責修改myUserControl1
依賴性的一個屬性。 (說SomeProperty
)
private static void IsDP1PropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var instance = d as MyUserControl2;
if (instance != null)
{
instance.myUserControl1.SomeProperty = function(e.NewValue);
}
}
當我試圖運行上面的代碼,我注意到,instance.myUserControl1爲空。所以,我對待它像這樣:
if (instance != null && instance.myUserControl1 != null)
{
instance.myUserControl1.SomeProperty = function(e.NewValue);
}
儘管這種方法解決了這個問題,它會導致myUserControl1.SomeProperty
保持未初始化。於是,我把下面的代碼片段在加載事件來解決它:
private void MyUserControl2_Loaded(object sender, RoutedEventArgs e)
{
this.myUserControl1.SomeProperty = function(DP1);
}
在那之後,我遇到的另一個問題!
當我使用二傳手風格的一些屬性值設置爲DP1
,我收到了空引用異常,說myUserControl1
財產仍然是空的加載事件。我該如何解決它? -謝謝。
感謝@Mario。這非常有用。 – Mimi