gpt4 book ai didi

c# - UserControl 在 wpf 中使用父元素?

转载 作者:太空狗 更新时间:2023-10-29 21:23:53 25 4
gpt4 key购买 nike

当你在 wpf 中有一个用户控件时,它可以到达它的父元素之外吗?例如,我的用户控件只列出了一些通用的东西,这些东西保存在控件内,封装在主窗口的停靠面板中,但是我在主窗口中有一个文本框和按钮,我想从控件访问它们......这可能吗?

与更改整个窗口的内容并在每个用户控件中显示相同的文本框/按钮相比,它会节省我很多时间。如果有人有这方面的例子,将不胜感激。

最佳答案

是的,这是可能的,这里是我用来从具有 DP 的 UserControls 中编写演示文稿的一些代码。

我一点都不喜欢它,但它确实有效。我也认为这是一个很棒的主题,也许一些代码将有助于获得更好的答案!

干杯,
浆果

用户控件 XAML

<Button x:Name="btnAddNewItem" Style="{StaticResource blueButtonStyle}" >
<StackPanel Orientation="Horizontal">
<Image Source="{resx:Resx ResxName=Core.Presentation.Resources.MasterDetail, Key=bullet_add}" Stretch="Uniform" />
<Label x:Name="tbItemName" Margin="5" Foreground="White" Padding="10, 0">_Add New [item]</Label>
</StackPanel>
</Button>

背后的用户控制代码

public partial class AddNewItemButton : UserControl
{
...

#region Item Name

public static readonly DependencyProperty ItemNameProperty = DependencyProperty.Register(
"ItemName", typeof(string), typeof(AddNewItemButton),
new FrameworkPropertyMetadata(OnItemNameChanged));

public string ItemName
{
get { return (string)GetValue(ItemNameProperty); }
set { SetValue(ItemNameProperty, value); }
}

public string ButtonText { get { return (string) tbItemName.Content; } }

private static void OnItemNameChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
// When the item name changes, set the text of the item name
var control = (AddNewItemButton)obj;

control.tbItemName.Content = string.Format(GlobalCommandStrings.Subject_Add, control.ItemName.Capitalize());
control.ToolTip = string.Format(GlobalCommandStrings.Subject_Add_ToolTip, control.ItemName);
}

#endregion

#region Command

public static readonly DependencyProperty CommandProperty = DependencyProperty.Register(
"Command", typeof(ICommand), typeof(AddNewItemButton),
new FrameworkPropertyMetadata(OnCommandChanged));

public ICommand Command
{
get { return (ICommand)GetValue(CommandProperty); }
set { SetValue(CommandProperty, value); }
}

private static void OnCommandChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
{
// When the item name changes, set the text of the item name
var control = (AddNewItemButton)obj;
control.btnAddNewItem.Command = control.Command;
}

#endregion

}

enter image description here

另一个显示组合的用户控件

<UserControl ...
xmlns:uc="clr-namespace:Smack.Core.Presentation.Wpf.Controls.UserControls"
>

<DockPanel LastChildFill="True">
...
<uc:AddNewItemButton x:Name="_addNewItemButton" Margin="0,0,10 0" DockPanel.Dock="Right" />
...
</DockPanel>
</UserControl>

enter image description here

关于c# - UserControl 在 wpf 中使用父元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10200812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com