問題: 我想在XAML
中創建一個按鈕模板,其中我將圖像源綁定到內容展示器內容框或類似的東西。Binding ImageSource DesignTime
的解決方案所需的參數: 我明白,一個標準的按鍵我能一個StackPanel或網格添加到該按鈕,將圖片插入所述容器和收工。不過,我並不喜歡Windows'chrome'外觀,也不是藍色鼠標,單擊和聚焦效果。我試圖做的是創建一個新的按鈕模板(編輯默認按鈕模板的副本,並刪除鉻容器),有能力成爲一個基本模板,隨着我添加更多按鈕,可以選擇更改圖像。
事情我已經試過及其結果:
<Button x:Name="btn">
<StackPanel>
<Image source="imgsource.png"/>
</StackPanel>
</Button>
結果:有按鈕鍍鉻效果。如果沒有其他可能,可以回落,但我不喜歡它。
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="bContainer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" Height="{TemplateBinding Height}" VerticalAlignment="{TemplateBinding VerticalAlignment}" Width="{TemplateBinding Width}">
<Grid x:Name="gBody" Background="#FF3C3C3C"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="true"/>
<Trigger Property="ToggleButton.IsChecked" Value="true"/>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Button Style="{DynamicResource ButtonStyle}">
<Grid>
<Image Source="imgsource.png"/>
</Grid>
</Button>
結果:圖像不顯示。我認爲這是由於按鈕自定義模板,但我的知識是有限的,所以我還沒有深入研究。
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border x:Name="bContainer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" HorizontalAlignment="{TemplateBinding HorizontalAlignment}" Height="{TemplateBinding Height}" VerticalAlignment="{TemplateBinding VerticalAlignment}" Width="{TemplateBinding Width}">
<Image x:Name="iImage" Source="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" HorizontalAlignment="Left" Height="16" VerticalAlignment="Top" Width="16"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="true"/>
<Trigger Property="ToggleButton.IsChecked" Value="true"/>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Button Style="{DynamicResource ButtonStyle}">
<Grid>
<Image Source="imgsource.png"/>
</Grid>
</Button>
結果:進入到圖像的完整路徑時,圖像僅顯示了。我不確定我是否正確,但是在部署該程序時會不會造成問題?
把網格與'之間的圖像'要求設置按鈕的內容屬性。爲了可視化內容,ControlTemplate應該包含一個ContentPresenter。 – Clemens
謝謝,Clemens!傑森在下面說了同樣的想法。對於我在下面發佈的解決方案,我還有一個額外的問題。 –