Browse Source

Added DropDownItem.

So that drop down items can be highlighted as they're hovered.
pull/390/head
Steven Kirk 11 years ago
parent
commit
3b5d338ea5
  1. 6
      samples/ControlCatalog/Pages/CarouselPage.paml
  2. 2
      src/Perspex.Controls/DropDown.cs
  3. 12
      src/Perspex.Controls/DropDownItem.cs
  4. 1
      src/Perspex.Controls/Perspex.Controls.csproj
  5. 4
      src/Perspex.Controls/Primitives/SelectingItemsControl.cs
  6. 1
      src/Perspex.Themes.Default/DefaultTheme.paml
  7. 4
      src/Perspex.Themes.Default/DropDown.paml
  8. 23
      src/Perspex.Themes.Default/DropDownItem.paml
  9. 3
      src/Perspex.Themes.Default/Perspex.Themes.Default.csproj

6
samples/ControlCatalog/Pages/CarouselPage.paml

@ -23,9 +23,9 @@
<StackPanel Orientation="Horizontal" Gap="4">
<TextBlock VerticalAlignment="Center">Transition</TextBlock>
<DropDown Name="transition" SelectedIndex="1" VerticalAlignment="Center">
<ListBoxItem>None</ListBoxItem>
<ListBoxItem>Slide</ListBoxItem>
<ListBoxItem>Crossfade</ListBoxItem>
<DropDownItem>None</DropDownItem>
<DropDownItem>Slide</DropDownItem>
<DropDownItem>Crossfade</DropDownItem>
</DropDown>
</StackPanel>

2
src/Perspex.Controls/DropDown.cs

@ -80,7 +80,7 @@ namespace Perspex.Controls
protected override IItemContainerGenerator CreateItemContainerGenerator()
{
return new ItemContainerGenerator<ListBoxItem>(this, ListBoxItem.ContentProperty);
return new ItemContainerGenerator<DropDownItem>(this, DropDownItem.ContentProperty);
}
protected override void OnAttachedToLogicalTree(LogicalTreeAttachmentEventArgs e)

12
src/Perspex.Controls/DropDownItem.cs

@ -0,0 +1,12 @@
// Copyright (c) The Perspex Project. All rights reserved.
// Licensed under the MIT license. See licence.md file in the project root for full license information.
namespace Perspex.Controls
{
/// <summary>
/// A selectable item in a <see cref="DropDown"/>.
/// </summary>
public class DropDownItem : ListBoxItem
{
}
}

1
src/Perspex.Controls/Perspex.Controls.csproj

@ -50,6 +50,7 @@
<Compile Include="HotkeyManager.cs" />
<Compile Include="INameScope.cs" />
<Compile Include="IPseudoClasses.cs" />
<Compile Include="DropDownItem.cs" />
<Compile Include="Mixins\ContentControlMixin.cs" />
<Compile Include="NameScope.cs" />
<Compile Include="NameScopeEventArgs.cs" />

4
src/Perspex.Controls/Primitives/SelectingItemsControl.cs

@ -245,8 +245,8 @@ namespace Perspex.Controls.Primitives
protected IControl GetContainerFromEventSource(IInteractive eventSource)
{
var item = ((IVisual)eventSource).GetSelfAndVisualAncestors()
.OfType<ILogical>()
.FirstOrDefault(x => x.LogicalParent == this);
.OfType<IControl>()
.FirstOrDefault(x => x.LogicalParent == this && ItemContainerGenerator?.IndexFromContainer(x) != -1);
return item as IControl;
}

1
src/Perspex.Themes.Default/DefaultTheme.paml

@ -5,6 +5,7 @@
<StyleInclude Source="resm:Perspex.Themes.Default.CheckBox.paml?assembly=Perspex.Themes.Default"/>
<StyleInclude Source="resm:Perspex.Themes.Default.ContentControl.paml?assembly=Perspex.Themes.Default"/>
<StyleInclude Source="resm:Perspex.Themes.Default.DropDown.paml?assembly=Perspex.Themes.Default"/>
<StyleInclude Source="resm:Perspex.Themes.Default.DropDownItem.paml?assembly=Perspex.Themes.Default"/>
<StyleInclude Source="resm:Perspex.Themes.Default.GridSplitter.paml?assembly=Perspex.Themes.Default"/>
<StyleInclude Source="resm:Perspex.Themes.Default.ItemsControl.paml?assembly=Perspex.Themes.Default"/>
<StyleInclude Source="resm:Perspex.Themes.Default.ListBox.paml?assembly=Perspex.Themes.Default"/>

4
src/Perspex.Themes.Default/DropDown.paml

@ -35,8 +35,7 @@
PlacementTarget="{TemplateBinding}"
StaysOpen="False">
<Border BorderBrush="Black"
BorderThickness="1"
Padding="4">
BorderThickness="1">
<ItemsPresenter Name="PART_ItemsPresenter"
Items="{TemplateBinding Items}"
MemberSelector="{TemplateBinding MemberSelector}"/>
@ -46,7 +45,6 @@
</Border>
</ControlTemplate>
</Setter>
</Style>
<Style Selector="CheckBox /template/ Path#checkMark">
<Setter Property="IsVisible" Value="False"/>

23
src/Perspex.Themes.Default/DropDownItem.paml

@ -0,0 +1,23 @@
<Styles xmlns="https://github.com/perspex">
<Style Selector="DropDownItem">
<Setter Property="Padding" Value="2"/>
<Setter Property="Template">
<ControlTemplate>
<Border Name="border"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}">
<ContentPresenter Name="PART_ContentPresenter"
Content="{TemplateBinding Content}"
Margin="{TemplateBinding Padding}"/>
</Border>
</ControlTemplate>
</Setter>
</Style>
<Style Selector="DropDownItem:selected /template/ Border#border">
<Setter Property="Background" Value="#ffe5f0fc"/>
</Style>
<Style Selector="DropDownItem:pointerover /template/ Border#border">
<Setter Property="Background" Value="#ffd0d0d0"/>
</Style>
</Styles>

3
src/Perspex.Themes.Default/Perspex.Themes.Default.csproj

@ -144,6 +144,9 @@
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Expander.paml" />
<EmbeddedResource Include="DropDownItem.paml">
<SubType>Designer</SubType>
</EmbeddedResource>
<None Include="packages.config" />
<EmbeddedResource Include="PopupRoot.paml">
<SubType>Designer</SubType>

Loading…
Cancel
Save