如果这是一个愚蠢的问题,请道歉。看起来应该很容易,但我想不出怎么做。我有许多按钮,每个按钮都有一个图像和一个内容的文本块。我正在尝试为按钮创建样式以在图像和文本块上设置属性。
这是我到目前为止所得到的。
在我看来:
<Button Command="{Binding TolerancesCommand}">
<StackPanel>
<Image Source="{StaticResource DeviationIcon}"/>
<TextBlock Text="Tolerances"/>
</StackPanel>
</Button>
在我的资源词典中:
<Style TargetType="Button">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Margin" Value="{StaticResource DefaultMargin}"/>
<Setter Property="BorderBrush" Value="{StaticResource NavButtonBorderBrush}"/>
<Setter Property="BorderThickness" Value="2"/>
<Setter Property="Height" Value="Auto"/>
<Setter Property="Width" Value="{StaticResource NavButtonWidth}"/>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<StackPanel>
<Image Source="{Binding}" Height="20" Width="20"/>
<TextBlock Text="{Binding}" Foreground="Green"/>
</StackPanel>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
具体来说,我想在样式中设置图像的高度和宽度,而不是必须在每个按钮上单独设置它。
更新
为了清楚起见,风格正在应用中。在上面的示例中,按钮文本为textblock前景属性中设置的绿色。问题是我无法显示图像。按钮显示但其内容只是文本“System.Windows.Controls.StackPanel”。
答案 0 :(得分:0)
答案 1 :(得分:0)
如果您需要可重复使用的样式,您可以按照Bailey_989的建议进行操作,如果您只想为一个按钮应用自定义内容,则可以应用此代码:
<Button Command="{Binding TolerancesCommand}">
<Button.Content>
<StackPanel>
<Image Source="{StaticResource DeviationIcon}"/>
<TextBlock Text="Tolerances"/>
</StackPanel>
</Button.Content>
</Button>
对于图像,请确保缩放图像。最好的方法是获取.svg格式图像,然后将其转换为.xaml,然后将其添加到您的资源并使用它。您将获得矢量图像,您可以根据需要将其缩放,并且不会显示任何像素。
答案 2 :(得分:-1)
您需要为该样式指定一个Key,并将数据模板更改为控件模板
<Style x:Key="MyButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
然后按下按钮:
<Button Style="{StaticResource MyButtonStyle}" Command="{Binding TolerancesCommand}">
...
</Button>
另外,请确保您的资源字典已添加到App.xaml类中的应用程序资源中:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/AssemblyName;component/FolderName/Dictionary.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>