我想更改選定的背景並使其顯示具有圓角的漸變。我搜索了Google,發現有些人通過覆蓋默認顏色來改變所選的顏色。有什麼辦法可以做到這一點?我在想,有什麼辦法可以在選擇一個項目時顯示一個圓形的邊框作爲背景?更改選定的顏色列表框
3
A
回答
8
這是ListBoxItem的默認樣式(這是我們想要更改的)。如果通過右鍵單擊Objects和Timelines控件中的listboxitem來使用Expression Blend 4,則可以「檢索」此樣式。
<Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}">
<Setter Property="Background" Value="Transparent"/>
<Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
<Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
<Setter Property="Padding" Value="2,0,0,0"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Background="{TemplateBinding Background}"
Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true"
>
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsSelected" Value="true">
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/>
</Trigger>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="Selector.IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
</MultiTrigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
讓我們把一些重要的部分,讓你學會這個做自己。
<Style x:Key="ListBoxItemStyle1" TargetType="{x:Type ListBoxItem}">
這是樣式聲明的開始。我們給它一個x:Key以便它可以從資源字典中檢索,並且我們已經爲ListBoxItem設置了TargetType。
現在,我們要查找我們想要改變的樣式部分。在這種情況下,我們要下去並在新的ControlTemplate上查找MultiTrigger的一部分樣式。
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="true"/>
<Condition Property="Selector.IsSelectionActive" Value="false"/>
</MultiTrigger.Conditions>
<Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
</MultiTrigger>
此MultiTrigger需要2個屬性才能匹配值才能被激活。這個觸發器在激活時會將背景顏色更改爲Value =「...」,將前景顏色更改爲Value =「...」。爲了獲得漸變背景,我們需要將Background Value =「...」中的值更改爲不同的畫筆。讓我們創建一個小巧的漸變畫筆(非常豐富多彩的一個呢!)
<LinearGradientBrush x:Key="GradientBrush" StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="Yellow" Offset="0.0" />
<GradientStop Color="Red" Offset="0.25" />
<GradientStop Color="Blue" Offset="0.75" />
<GradientStop Color="LimeGreen" Offset="1.0" />
</LinearGradientBrush>
現在讓我們這個適用於本觸發的背景。
<Setter Property="Background" TargetName="Bd" Value="{StaticResource GradientBrush}"/>
現在,當這種風格應用到ListBoxItem的,而ListBoxItem的IsSelected = TRUE(和Selector.IsSelectionActive = FALSE),你會看到在ListBoxItem的漸變背景。
現在,你也想要圓角。如果我們走到ControlTemplate的頂部,我們會看到一個邊界聲明。
<Border x:Name="Bd"
在該聲明中,我們想要添加一個CornerRadius屬性以在ListBoxItem上四捨五入。
CornerRadius="5"
而現在,你應該可以創建一個圓角半徑,線性漸變背景listboxitem。我希望你能夠從這裏繼續自己。
1
我在我的博客here上有一個示例。它覆蓋ControlTemplate及其使用的顏色。
相關問題
- 1. 更改列表框中選定項目的背景顏色
- 2. 如何更改asp.net中列表框的選定顏色
- 3. 更改選定列表框項目的背景顏色
- 4. 更改列表框的背景顏色
- 5. 列表框更改選定背景顏色
- 6. 如何更改選定列的顏色?
- 7. 更改多選列表的複選框顏色
- 8. 列表框選定的文本顏色
- 9. C#:更改列表框項目顏色
- 10. 更改列表框顏色如果
- 11. 更改複選框的顏色邊框
- 12. 更改選擇框的邊框顏色
- 13. 更改列表框中所選項目的顏色
- 14. 如何更改列表框中未選中的項目顏色
- 15. 更改列表框的選擇顏色項目
- 16. 更改複選框顏色的下拉列表
- 17. 更改複選框邊框顏色
- 18. Android更改複選框選中顏色
- 19. 更改綁定的LongListSelector或列表框的項目顏色
- 20. 更改所選UITableViewCell的邊框顏色
- 21. jqGrid更改複選框的行顏色
- 22. 停止選擇框從更改選定的選項顏色
- 23. JQuery更改選定列表項的背景顏色
- 24. 更改列表中選定區域的顏色?
- 25. 使用knockout.js更改多個列表框中的顏色或選定項目
- 26. 更改列表框/列表視圖中所選項目的顏色
- 27. 更改tilelist上選擇的背景顏色和邊框顏色?
- 28. WP7 - 更改multiselectlist複選框顏色
- 29. jquery移動更改複選框顏色
- 30. @ Html.CheckBoxFor() - 更改複選框標籤顏色
哇,很好的答案! – CodeNaked 2011-04-02 00:33:25
Wao這是偉大的迷你toutorial.You是男人。 首先它沒有工作,但改變'GradientBrush'name的工作。我認爲它有任何方式有一些衝突。 這是一個很好的答案 – 2011-04-02 01:07:45