我正在尝试创建一个包含图像和文本的按钮。但是,图像可以在运行时通过后面的代码进行更改。我的图片是 png,每个人都在我的 ResourceDictionary 中:
<BitmapImage x:Key="iconLogIn" UriSource="/Images/Icons/lock.png" />
所以,我从这种风格开始,没有模板或内容模板。
<Style x:Key="MyTestButton" TargetType="{x:Type Button}">
<Setter Property="Height" Value="80" />
<Setter Property="Width" Value="100" />
</Style>
我的 XAML 是:
<Button x:Name="cmdOption1" Style="{StaticResource MyTestButton}" Margin="8" Click="cmdOption1_Click">
<Image Source="{DynamicResource iconLogIn}" />
</Button>
然后,我更改图像的代码是:
cmdOption1.Content = new Image() { Source = ((BitmapImage)FindResource("iconLogOut")) };
到目前为止,这行得通。
但是,只保存图像,我想在图像下放置一个文本。
所以我读过这篇文章,HighCore 的答案,选项 #2,可能会满足我的要求。但是,现在又出现了一个新问题:
首先,这是新样式,带有一个简单的模板
<Style x:Key="MyTestButton" TargetType="{x:Type Button}">
<Setter Property="Background" Value="#EEEEEE" />
<Setter Property="Foreground" Value="DarkSlateGray" />
<Setter Property="Height" Value="80" />
<Setter Property="Width" Value="100" />
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="2"/>
<Setter Property="FontSize" Value="12" />
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="BorderBrush" Value="DarkGray" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border>
<StackPanel>
<Image Source="{Binding Tag, RelativeSource={RelativeSource TemplatedParent}}" Height="50" Width="50"/>
<ContentPresenter Grid.Row="0" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True" />
</StackPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Foreground" Value="DarkOrange" />
<Setter Property="OpacityMask" Value="#AA888888"/>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="Gray" />
<Setter Property="BorderBrush" Value="DarkGray" />
<Setter Property="Background" Value="White" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Style>
我的新 XAML 是:
<Button x:Name="cmdOption1" Tag="{StaticResource iconLogIn}" Content="LOG IN" Style="{StaticResource MyTestButton}" Margin="8" Click="cmdOption1_Click" />
*还带有标签 =“{DynamicResource iconLogIn}”
而我背后的代码来更改图像和文本:
cmdOption1.Tag = new Image() { Source = ((BitmapImage)FindResource("iconLogOut")) };
cmdOption1.Content = "LOG OUT";
这样,内容文本从“LOG IN”变为“LOG OUT”。但是图像不再显示,只是在图像的位置没有任何内容,并且没有抛出错误或异常。
我想知道解决方案是什么,发生了什么?为什么图像没有改变,而是消失了?
提前致谢。