WPF自定义工具栏

时间:2013-07-10 23:30:58

标签: wpf toolbar

我是WPF的新手。我想创建带有标准按钮的自定义工具栏,如下所示。当我从工具箱中拖放controll时,所有按钮都应自动添加文本和图像。我还想为每个按钮添加属性CommandName按钮和单击时我想在viewmodel中使用命令名称绑定命令。请帮助我吗?

    <ToolBar VerticalAlignment="Top">
        <Button>Add</Button>
        <Separator></Separator>
        <Button>Update</Button>
        <Separator></Separator>
        <Button>Delete</Button>
        <Separator></Separator>
        <Button>Clear</Button>
        <Separator></Separator>
        <Button>Logout</Button>
        <Separator></Separator>
        <Button>Excel</Button>

    </ToolBar>

2 个答案:

答案 0 :(得分:0)

您需要从here获得的RelayCommand类。

然后在ViewModel中创建一个RelayCommand,并将该命令与您的按钮绑定,如下所示

<Button Command="{Binding YourCommandName}">

所以基本上你需要一个自定义控件。 将这些按钮放在自定义控件的控件模板中。 公开这些按钮的点击事件。 让Add按钮的点击事件名称为ClickAdd。 然后将命令绑定到XAML中的Add按钮

<local:YourCustomControl>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="ClickAdd">
            <i:InvokeCommandAction Command="{Binding YourCommandName}">  </i:InvokeCommandAction>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</local:YourCustomControl>

的xmlns:I =&#34; CLR-名称空间:System.Windows.Interactivity;装配= System.Windows.Interactivity&#34;

答案 1 :(得分:0)

非常感谢你。 问题是我没有设置DefaultStyleKey.So当我从工具箱拖放控件时我在controltemplate中添加的按钮没有在窗口上显示。基本解决方案是

 public class StToolBar:ToolBar
    {
        public StToolBar()
        {
            this.DefaultStyleKey = typeof(StToolBar);
        }
    }

Generic.xaml

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:UserControl">
    <Style TargetType="{x:Type local:StToolBar}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:StToolBar}">
                        <ToolBar>
                            <Button>Add</Button>
                            <Button>Update</Button>
                        </ToolBar>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


</ResourceDictionary>