feat: move readonly to item.
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
<u:Breadcrumb>
|
<u:Breadcrumb>
|
||||||
<TextBlock Text="Hello" />
|
<TextBlock Text="Hello" />
|
||||||
|
<u:BreadcrumbItem Content="World" IsReadOnly="True"></u:BreadcrumbItem>
|
||||||
<u:BreadcrumbItem Icon="?" Separator="♥" />
|
<u:BreadcrumbItem Icon="?" Separator="♥" />
|
||||||
<TextBlock Text="Avalonia" />
|
<TextBlock Text="Avalonia" />
|
||||||
<TextBlock Text="Ursa" />
|
<TextBlock Text="Ursa" />
|
||||||
@@ -29,7 +30,7 @@
|
|||||||
<TextBlock Text="Avalonia" />
|
<TextBlock Text="Avalonia" />
|
||||||
<TextBlock Text="Ursa" />
|
<TextBlock Text="Ursa" />
|
||||||
</u:Breadcrumb>
|
</u:Breadcrumb>
|
||||||
<u:Breadcrumb IsReadOnly="True">
|
<u:Breadcrumb>
|
||||||
<TextBlock Text="Hello" />
|
<TextBlock Text="Hello" />
|
||||||
<u:BreadcrumbItem Icon="?" Separator="♥" />
|
<u:BreadcrumbItem Icon="?" Separator="♥" />
|
||||||
<TextBlock Text="Avalonia" />
|
<TextBlock Text="Avalonia" />
|
||||||
@@ -40,6 +41,11 @@
|
|||||||
IconBinding="{Binding Icon}"
|
IconBinding="{Binding Icon}"
|
||||||
CommandBinding="{Binding Command}"
|
CommandBinding="{Binding Command}"
|
||||||
ItemsSource="{Binding Items1}">
|
ItemsSource="{Binding Items1}">
|
||||||
|
<u:Breadcrumb.Styles>
|
||||||
|
<Style Selector="u|BreadcrumbItem" x:DataType="vm:BreadcrumbDemoItem">
|
||||||
|
<Setter Property="IsReadOnly" Value="{Binding IsReadOnly}"/>
|
||||||
|
</Style>
|
||||||
|
</u:Breadcrumb.Styles>
|
||||||
<u:Breadcrumb.IconTemplate>
|
<u:Breadcrumb.IconTemplate>
|
||||||
<DataTemplate DataType="x:String">
|
<DataTemplate DataType="x:String">
|
||||||
<PathIcon Width="12" Height="12" Data="{Binding Path=., Converter={StaticResource IconConverter}}"></PathIcon>
|
<PathIcon Width="12" Height="12" Data="{Binding Path=., Converter={StaticResource IconConverter}}"></PathIcon>
|
||||||
|
|||||||
@@ -18,15 +18,16 @@ public class BreadcrumbDemoViewModel: ObservableObject
|
|||||||
new BreadcrumbDemoItem() { Section = "Page 1", Icon = "Page" },
|
new BreadcrumbDemoItem() { Section = "Page 1", Icon = "Page" },
|
||||||
new BreadcrumbDemoItem() { Section = "Page 2", Icon = "Page" },
|
new BreadcrumbDemoItem() { Section = "Page 2", Icon = "Page" },
|
||||||
new BreadcrumbDemoItem() { Section = "Page 3", Icon = "Page" },
|
new BreadcrumbDemoItem() { Section = "Page 3", Icon = "Page" },
|
||||||
new BreadcrumbDemoItem() { Section = "Page 4", Icon = "Page" },
|
new BreadcrumbDemoItem() { Section = "Page 4", Icon = "Page", IsReadOnly = true},
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BreadcrumbDemoItem: ObservableObject
|
public partial class BreadcrumbDemoItem: ObservableObject
|
||||||
{
|
{
|
||||||
public string Section { get; set; }
|
public string Section { get; set; }
|
||||||
public string Icon { get; set; }
|
public string Icon { get; set; }
|
||||||
|
[ObservableProperty] private bool _isReadOnly;
|
||||||
|
|
||||||
public ICommand Command { get; set; }
|
public ICommand Command { get; set; }
|
||||||
|
|
||||||
|
|||||||
@@ -19,13 +19,9 @@
|
|||||||
<ItemsPresenter ItemsPanel="{TemplateBinding ItemsPanel}" />
|
<ItemsPresenter ItemsPanel="{TemplateBinding ItemsPanel}" />
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
<Style Selector="^[IsReadOnly=True]">
|
|
||||||
<Setter Property="ItemContainerTheme" Value="{DynamicResource ReadOnlyBreadcrumbItem}"></Setter>
|
|
||||||
</Style>
|
|
||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="{x:Type u:BreadcrumbItem}" TargetType="u:BreadcrumbItem">
|
<ControlTheme x:Key="{x:Type u:BreadcrumbItem}" TargetType="u:BreadcrumbItem">
|
||||||
<Setter Property="Cursor" Value="Hand" />
|
|
||||||
<Setter Property="Template">
|
<Setter Property="Template">
|
||||||
<ControlTemplate TargetType="u:BreadcrumbItem">
|
<ControlTemplate TargetType="u:BreadcrumbItem">
|
||||||
<Border Background="Transparent">
|
<Border Background="Transparent">
|
||||||
@@ -61,6 +57,9 @@
|
|||||||
</Border>
|
</Border>
|
||||||
</ControlTemplate>
|
</ControlTemplate>
|
||||||
</Setter>
|
</Setter>
|
||||||
|
<Style Selector="^[IsReadOnly=False]">
|
||||||
|
<Setter Property="Cursor" Value="Hand"></Setter>
|
||||||
|
</Style>
|
||||||
<Style Selector="^:last">
|
<Style Selector="^:last">
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
||||||
<Setter Property="Foreground" Value="{DynamicResource SemiColorText0}" />
|
<Setter Property="Foreground" Value="{DynamicResource SemiColorText0}" />
|
||||||
@@ -72,7 +71,7 @@
|
|||||||
<Style Selector="^ /template/ ContentPresenter#Separator">
|
<Style Selector="^ /template/ ContentPresenter#Separator">
|
||||||
<Setter Property="IsVisible" Value="False" />
|
<Setter Property="IsVisible" Value="False" />
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="^:pointerover">
|
<Style Selector="^[IsReadOnly=False]:pointerover">
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
||||||
<Setter Property="Foreground" Value="{DynamicResource SemiBlue5}" />
|
<Setter Property="Foreground" Value="{DynamicResource SemiBlue5}" />
|
||||||
</Style>
|
</Style>
|
||||||
@@ -81,7 +80,7 @@
|
|||||||
</Style>
|
</Style>
|
||||||
</Style>
|
</Style>
|
||||||
</Style>
|
</Style>
|
||||||
<Style Selector="^:pointerover">
|
<Style Selector="^[IsReadOnly=False]:pointerover">
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
||||||
<Setter Property="Foreground" Value="{DynamicResource SemiBlue5}" />
|
<Setter Property="Foreground" Value="{DynamicResource SemiBlue5}" />
|
||||||
</Style>
|
</Style>
|
||||||
@@ -90,55 +89,4 @@
|
|||||||
</Style>
|
</Style>
|
||||||
</Style>
|
</Style>
|
||||||
</ControlTheme>
|
</ControlTheme>
|
||||||
|
|
||||||
<ControlTheme x:Key="ReadOnlyBreadcrumbItem" TargetType="u:BreadcrumbItem">
|
|
||||||
<Setter Property="Cursor" Value="Hand" />
|
|
||||||
<Setter Property="Template">
|
|
||||||
<ControlTemplate TargetType="u:BreadcrumbItem">
|
|
||||||
<Border Background="Transparent">
|
|
||||||
<StackPanel Orientation="Horizontal">
|
|
||||||
<ContentPresenter
|
|
||||||
Name="PART_IconPresenter"
|
|
||||||
Margin="0,0,4,0"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Content="{TemplateBinding Icon}"
|
|
||||||
ContentTemplate="{TemplateBinding IconTemplate}"
|
|
||||||
Foreground="{DynamicResource SemiColorText2}"
|
|
||||||
IsVisible="{TemplateBinding Icon,
|
|
||||||
Converter={x:Static ObjectConverters.IsNotNull}}" />
|
|
||||||
<ContentPresenter
|
|
||||||
Name="PART_ContentPresenter"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Content="{TemplateBinding Content}"
|
|
||||||
ContentTemplate="{TemplateBinding ContentTemplate}"
|
|
||||||
Foreground="{DynamicResource SemiColorText2}"
|
|
||||||
IsVisible="{TemplateBinding Content,
|
|
||||||
Converter={x:Static ObjectConverters.IsNotNull}}" />
|
|
||||||
<ContentPresenter
|
|
||||||
Name="Separator"
|
|
||||||
Margin="4,0 0 0"
|
|
||||||
VerticalAlignment="Center"
|
|
||||||
Content="{TemplateBinding Separator}"
|
|
||||||
Foreground="{DynamicResource SemiColorText3}">
|
|
||||||
<ContentPresenter.IsVisible>
|
|
||||||
<TemplateBinding Converter="{x:Static ObjectConverters.IsNotNull}" Property="Separator" />
|
|
||||||
</ContentPresenter.IsVisible>
|
|
||||||
</ContentPresenter>
|
|
||||||
</StackPanel>
|
|
||||||
</Border>
|
|
||||||
</ControlTemplate>
|
|
||||||
</Setter>
|
|
||||||
<Style Selector="^:last">
|
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_IconPresenter">
|
|
||||||
<Setter Property="Foreground" Value="{DynamicResource SemiColorText0}" />
|
|
||||||
</Style>
|
|
||||||
<Style Selector="^ /template/ ContentPresenter#PART_ContentPresenter">
|
|
||||||
<Setter Property="Foreground" Value="{DynamicResource SemiColorText0}" />
|
|
||||||
<Setter Property="FontWeight" Value="Bold" />
|
|
||||||
</Style>
|
|
||||||
<Style Selector="^ /template/ ContentPresenter#Separator">
|
|
||||||
<Setter Property="IsVisible" Value="False" />
|
|
||||||
</Style>
|
|
||||||
</Style>
|
|
||||||
</ControlTheme>
|
|
||||||
</ResourceDictionary>
|
</ResourceDictionary>
|
||||||
|
|||||||
@@ -56,15 +56,6 @@ public class Breadcrumb: ItemsControl
|
|||||||
get => GetValue(IconTemplateProperty);
|
get => GetValue(IconTemplateProperty);
|
||||||
set => SetValue(IconTemplateProperty, value);
|
set => SetValue(IconTemplateProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static readonly StyledProperty<bool> IsReadOnlyProperty = AvaloniaProperty.Register<Breadcrumb, bool>(
|
|
||||||
nameof(IsReadOnly));
|
|
||||||
|
|
||||||
public bool IsReadOnly
|
|
||||||
{
|
|
||||||
get => GetValue(IsReadOnlyProperty);
|
|
||||||
set => SetValue(IsReadOnlyProperty, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Breadcrumb()
|
static Breadcrumb()
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -49,11 +49,19 @@ public class BreadcrumbItem: ContentControl
|
|||||||
set => SetValue(IconTemplateProperty, value);
|
set => SetValue(IconTemplateProperty, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static readonly StyledProperty<bool> IsReadOnlyProperty = AvaloniaProperty.Register<BreadcrumbItem, bool>(
|
||||||
|
nameof(IsReadOnly));
|
||||||
|
|
||||||
|
public bool IsReadOnly
|
||||||
|
{
|
||||||
|
get => GetValue(IsReadOnlyProperty);
|
||||||
|
set => SetValue(IsReadOnlyProperty, value);
|
||||||
|
}
|
||||||
|
|
||||||
protected override void OnPointerPressed(PointerPressedEventArgs e)
|
protected override void OnPointerPressed(PointerPressedEventArgs e)
|
||||||
{
|
{
|
||||||
base.OnPointerPressed(e);
|
base.OnPointerPressed(e);
|
||||||
var parent = this.FindLogicalAncestorOfType<Breadcrumb>();
|
if (!IsReadOnly)
|
||||||
if (parent?.IsReadOnly != true)
|
|
||||||
{
|
{
|
||||||
Command?.Execute(null);
|
Command?.Execute(null);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user