控件相对于源的 WPF 内容
WPF Content of Control relative to source
我有以下代码用于以图像作为内容的自定义 WPF 单选按钮。
图片 Built Action 设置为“Content”,Copy to Output Directory 设置为“Copy if newer”。
<!--MaterialButtonTheme-->
<Style BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type RadioButton}"
x:Key="MaterialButtonTheme">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Background="{TemplateBinding Background}">
<Border>
<Image Source="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Opacity" Value=".3"/>
<Setter Property="BorderThickness" Value="0"/>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value=".8"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Opacity" Value=".6"/>
</Trigger>
</Style.Triggers>
</Style>
现在,我不想对图像资源使用硬编码变体,但以下方法不起作用。
<RadioButton
x:Name="RadioButtonSteelMat"
Height="30" Width="30"
Foreground="White"
HorizontalAlignment="Left"
FontSize="14"
Style="{StaticResource MaterialButtonTheme}"
Content="../EmbeddedResources/Images/steel.png"
IsChecked="False"
Margin="10,200,0,0"
Checked="RadioButtonSteelMat_Checked"
/>
以下硬编码变体工作正常。有人知道我做错了什么吗?
<RadioButton
x:Name="RadioButtonSteelMat"
Height="30" Width="30"
Foreground="White"
HorizontalAlignment="Left"
FontSize="14"
Style="{StaticResource MaterialButtonTheme}"
Content="C:\Users\Niklas\Desktop\Studium\Master\M4\Thesis\Tool\OptioneeringTool\OptioneeringTool\B+GOpt\EmbeddedResources\Images\steel.png"
IsChecked="False"
Margin="10,200,0,0"
Checked="RadioButtonSteelMat_Checked"
/>
Content="/EmbeddedResources/Images/steel.png"
应该可以工作,假设 EmbeddedResources 文件夹位于 Visual Studio 中项目文件夹的根目录,并且图像文件的 Built Action
设置为“Content ”和 Copy to Output Directory
属性 到“如果更新则复制”。
另一种选择是将 Built Action
设置为“资源”并使用 pack URI 来引用它:
pack://application:,,,/EmbeddedResources/Images/steel.png
我有以下代码用于以图像作为内容的自定义 WPF 单选按钮。 图片 Built Action 设置为“Content”,Copy to Output Directory 设置为“Copy if newer”。
<!--MaterialButtonTheme-->
<Style BasedOn="{StaticResource {x:Type ToggleButton}}"
TargetType="{x:Type RadioButton}"
x:Key="MaterialButtonTheme">
<Style.Setters>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="RadioButton">
<Grid VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Background="{TemplateBinding Background}">
<Border>
<Image Source="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}"/>
</Border>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Background" Value="Transparent"/>
<Setter Property="Opacity" Value=".3"/>
<Setter Property="BorderThickness" Value="0"/>
</Style.Setters>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Opacity" Value=".8"/>
</Trigger>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Opacity" Value=".6"/>
</Trigger>
</Style.Triggers>
</Style>
现在,我不想对图像资源使用硬编码变体,但以下方法不起作用。
<RadioButton
x:Name="RadioButtonSteelMat"
Height="30" Width="30"
Foreground="White"
HorizontalAlignment="Left"
FontSize="14"
Style="{StaticResource MaterialButtonTheme}"
Content="../EmbeddedResources/Images/steel.png"
IsChecked="False"
Margin="10,200,0,0"
Checked="RadioButtonSteelMat_Checked"
/>
以下硬编码变体工作正常。有人知道我做错了什么吗?
<RadioButton
x:Name="RadioButtonSteelMat"
Height="30" Width="30"
Foreground="White"
HorizontalAlignment="Left"
FontSize="14"
Style="{StaticResource MaterialButtonTheme}"
Content="C:\Users\Niklas\Desktop\Studium\Master\M4\Thesis\Tool\OptioneeringTool\OptioneeringTool\B+GOpt\EmbeddedResources\Images\steel.png"
IsChecked="False"
Margin="10,200,0,0"
Checked="RadioButtonSteelMat_Checked"
/>
Content="/EmbeddedResources/Images/steel.png"
应该可以工作,假设 EmbeddedResources 文件夹位于 Visual Studio 中项目文件夹的根目录,并且图像文件的 Built Action
设置为“Content ”和 Copy to Output Directory
属性 到“如果更新则复制”。
另一种选择是将 Built Action
设置为“资源”并使用 pack URI 来引用它:
pack://application:,,,/EmbeddedResources/Images/steel.png