我試圖創建一個包含圖像和文本的按鈕。但是,圖像可以在運行時由代碼改變。我的圖片PNG,每個人都在我的ResourceDictionary如:WPF帶圖像+文本按鈕並更改代碼隱藏圖像
<BitmapImage x:Key="iconLogIn" UriSource="/Images/Icons/lock.png" />
所以,我已經開始使用這種風格,沒有模板或的ContentTemplate。
<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")) };
到目前爲止,這個工程。
但是,只保留圖像,我想放置在圖像下的文本。
因此,我已閱讀this後,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";
這樣,內容文本從「登錄」變爲「登出」。但是圖像不再顯示,圖像中沒有任何內容,也沒有錯誤或異常。
我想知道最新的解決方案,發生了什麼?爲什麼圖像只是沒有改變,但消失了?
在此先感謝。
我喜歡你的答案,由於時間限制,我無法更改爲MVVM。 – BlackCath