[英]How do I fully expose a nested control in a UserControl to the outside?
假設我有一個非常簡單的UserControl
:
<UserControl x:Class="Test.UserControls.MyControl">
<DockPanel>
<Label Content="lorem" />
<Button Name="ButtonFromUserControl" />
</DockPanel>
</UserControl>
例如,如果我在另一個文件中添加UserControl
,我想從外部訪問Button
所有屬性。 我在想象這樣的事情:
<StackPanel>
<usercontrols:MyControl Button.Dock="{Binding ButtonDockPosition}"/>
</StackPanel>
我知道我可以為每個屬性創建依賴屬性以使其可訪問,但是我還不知道以后可能會或可能不會使用哪些屬性,並且不想為每個嵌套控件的屬性添加 DP。
我不確定這是否是正確的方法,如果有另一種方式或模式我也會感興趣。
編輯:
我還嘗試使Button
本身成為 DP,但這不允許我訪問其屬性:
public static readonly DependencyProperty NestedButtonProperty =
DependencyProperty.RegisterAttached("NestedButton", typeof (Button), typeof (MyControl),
new FrameworkPropertyMetadata());
public Button NestedButton => ButtonFromUserControl;
我找到了一種至少不需要我生成大量轉發 DP 的解決方法。 由於大多數(或全部?)控件的屬性也可以通過Style
設置,我只是將每個控件的Style
設置為 DP:
public static readonly DependencyProperty ButtonStyleProperty =
DependencyProperty.RegisterAttached("ButtonStyle", typeof (Style), typeof (MyUserControl),
new FrameworkPropertyMetadata());
public Style ButtonStyle
{
get { return (Style) GetValue(ButtonStyleProperty); }
set { SetValue(ButtonStyleProperty, value); }
}
在UserControl
綁定它:
<Button Name="InnerButton" Style="{Binding ButtonStyle, ElementName=MyUserControl}" />
現在您可以使用自定義樣式設置Button
的屬性:
<userControls:MyUserControl>
<userControls:MyUserControl.ButtonStyle>
<Style TargetType="Button">
<Style.Setters>
<Setter Property="Content" Value="ButtonContent" />
<Setter Property="BorderThickness" Value="5" />
<Setter Property="BorderBrush" Value="Orange" />
</Style.Setters>
</Style>
</userControls:MyUserControl.ButtonStyle>
</userControls:MyUserControl>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.