gpt4 book ai didi

c# - 如何子类化 WPF ComboBox 以添加额外的按钮

转载 作者:行者123 更新时间:2023-11-30 15:10:13 25 4
gpt4 key购买 nike

我看到了一个类似的问题并希望得到一个解决方案,但仅仅给出一个子类化 ComboBox 的建议对我来说是不够的。我需要用小汤匙装...

案例是我需要在我的特殊组合框中添加一个额外的按钮来将新记录添加到项目列表中。我今天将它作为一个 UserControl,但它看起来不太好,我需要对我的 View 进行更多控制,所以我开始制作一个自定义控件来尝试扩展 ComboBox。

我没走多远...请帮帮我...:)

到目前为止我的代码:

public class ComboBoxWithAdd : ComboBox
{
static ComboBoxWithAdd()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(ComboBoxWithAdd), new FrameworkPropertyMetadata(typeof(ComboBoxWithAdd)));
}
}

在 Generic.xaml 中我有这个:

<Style TargetType="{x:Type local:ComboBoxWithAdd}" BasedOn="{StaticResource {x:Type ComboBox}}">        
</Style>

最佳答案

在决定创建自定义控件时,您需要确定是需要添加实际行为还是仅添加 UI。只需自定义 ControlTemplate 即可添加按钮。听起来您想要一个按钮,该按钮会导致一个 Action ,该 Action 将更新 ComboBox 的 Items,这将指向您开始从 ComboBox 派生控件的方向。您需要在代码和 XAML 端添加一些内容。在您的 Style 中,您需要为 ControlTemplate 添加一个 Setter,并从 ComboBox 的默认模板副本开始(我通常使用 Blend 这样做,但还有其他来源)。然后,您可以在模板中的任意位置添加新的 Button。

<Style TargetType="{x:Type local:ComboBoxWithAdd}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:ComboBoxWithAdd}">
... copy of default template with your modifications
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

有几种不同的方法可以连接按钮,但最可靠的方法是使用可以在控制代码中绑定(bind)的命令。您可以稍后在您的控制代码中声明您自己的 RoutedCommand,但要开始使用,只需使用一个内置的 RoutedCommand。

public ComboBoxWithAdd()
{
CommandBindings.Add(new CommandBinding(ApplicationCommands.New, NewExecutedMethod));
}

然后在 NewExecutedMethod 中添加您想要执行实际操作的任何逻辑以添加项目(可能使用 ComboBox 的 Items/ItemsSource)。要连接按钮,只需设置 Command="ApplicationCommands.New"。使用自定义控件可以完成更多工作,但这应该可以帮助您入门。

关于c# - 如何子类化 WPF ComboBox 以添加额外的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3515125/

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