我有一个工具栏,显示许多Button
Image
和TextBlock
。
然后,我创建一个CommandManager来管理所有Button
的命令。所以,我想实现一个工厂来分配Button
的{{1}}。
这是我的xaml和Command函数,我尝试传递所有TextBlock
的{{1}},但我不知道该怎么办。
Button
ActionManager:
Text
答案 0 :(得分:1)
Button
没有“文字”概念,但您可以将Tag
属性设置为string
并传递此属性:
<StackPanel>
<StackPanel.Resources>
<Style TargetType="{x:Type Button}">
<Setter Property="Command" Value="{Binding ActionCommand}"/>
<Setter Property="CommandParameter" Value="{Binding Path=Tag, RelativeSource={RelativeSource Self}}"/>
</Style>
</StackPanel.Resources>
<Button Tag="Open">
<StackPanel>
<Image Source="/Resources/ToolBar/open.png"/>
<TextBlock Text="Open"/>
</StackPanel>
</Button>
<Button Tag="Save">
<StackPanel>
<Image Source="/Resources/ToolBar/save.png"/>
<TextBlock Text="Save"/>
</StackPanel>
</Button>
</StackPanel>
答案 1 :(得分:0)
我会这样做的:
<Button Tag="AnyUniqueString">
并将命令绑定到它
<Setter Property="CommandParameter" Value="{Binding Path=Tag}"/>
所以你没有链接到文本按钮(你可以翻译它) - 但要注意一个命令,你将无法管理刷新和can_execute将启用/禁用你的按钮。将每个按钮绑定到单独的命令可能并不那么复杂......?
我在我的解决方案CBR
中使用它<StackPanel Margin="10,0,10,0" Orientation="Vertical">
<Button Style="{DynamicResource CbrStandardButton}" Margin="2,10,2,10"
Command="{Binding ForwardCommand}" CommandParameter="CatalogNewCommand" >
<DockPanel Margin="10">
<Image Source="/CBR;component/Resources/Images/32x32/library_new.png" Width="32"></Image>
<Label Style="{DynamicResource CbrLabel}"
Content="{LocalizationExtension ResModul=CBR, Key=HomeView.LblActionNew, DefaultValue=Start a new library}" />
</DockPanel>
</Button>
<Button Style="{DynamicResource CbrStandardButton}" Margin="2,10,2,10"
Command="{Binding ForwardCommand}" CommandParameter="BookOpenCommand" >
<DockPanel Margin="10">
<Image Source="/CBR;component/Resources/Images/32x32/book/book_read.png" Width="32"></Image>
<Label Style="{DynamicResource CbrLabel}"
Content="{LocalizationExtension ResModul=CBR, Key=HomeView.LblActionRead, DefaultValue=Read a book}" />
</DockPanel>
</Button>
<Button Style="{DynamicResource CbrStandardButton}" Margin="2,10,2,10"
Command="{Binding ForwardCommand}" CommandParameter="SysHelpCommand">
<DockPanel Margin="10">
<Image Source="/CBR;component/Resources/Images/32x32/book_type/book_type_xps.png" Width="32"></Image>
<Label Style="{DynamicResource CbrLabel}"
Content ="{LocalizationExtension ResModul=CBR, Key=HomeView.LblActionTutorial, DefaultValue=Quick start tutorial}" />
</DockPanel>
</Button>
</StackPanel>
答案 2 :(得分:0)
您可以使用此标记扩展程序:
https://www.codeproject.com/Articles/456589/Bindable-Converter-Parameter
它允许您将命令参数绑定到xaml属性。因此,您可以在按钮的标记字段中放置一些标识符,并使用扩展名将其绑定到命令参数。这样,您只使用一个命令,只使用一个绑定,您就可以获得区分命令处理程序中的按钮所需的全部内容。
希望有所帮助