Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add sample Options #803

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 26 additions & 5 deletions Uno.Gallery/Uno.Gallery.Shared/Extensions/XamlDisplayExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public static class XamlDisplayExtensions
* PrettyXaml: [reserved] custom formatted xaml based on IgnorePath
* ShowXaml: [reserved] bool driving whether or not to display the formatted xaml
* IsXamlDirty: [reserved] denotes whether the xaml string needs to be re-formatted prior to display
* Options: [optional] displays a options panel next to the control example
*/

#region Property: Header
Expand Down Expand Up @@ -108,6 +109,22 @@ public static class XamlDisplayExtensions

#endregion

#region Property: Options
public static DependencyProperty OptionsProperty { get; } = DependencyProperty.Register(
"Options",
typeof(object),
#if NETFX_CORE
typeof(XamlDisplayExtensions),
#else
//Causes System.InvalidOperationException: The Dependency Property [Options] is owned by [ShowMeTheXAML.XamlDisplayExtensions] and cannot be used... on Uno targets
typeof(XamlDisplay),
#endif
new PropertyMetadata(null));

public static object GetOptions(XamlDisplay obj) => (object)obj.GetValue(OptionsProperty);
public static void SetOptions(XamlDisplay obj, object value) => obj.SetValue(OptionsProperty, value);
#endregion

private static void OnIgnorePathChanged(XamlDisplay sender, DependencyPropertyChangedEventArgs e)
{
sender.RegisterPropertyChangedCallback(XamlDisplay.XamlProperty, OnXamlChanged);
Expand All @@ -126,7 +143,7 @@ private static void OnShowXamlChanged(XamlDisplay sender, bool showXaml)
return;
}

SetIsXamlDirty(target, false);
SetIsXamlDirty(target, false);
var ignorePath = GetIgnorePath(target);
var formatter = new PrettyXamlFormatter() { IgnorePath = ignorePath };
var xaml = formatter.FormatXaml(target.Xaml);
Expand Down Expand Up @@ -235,7 +252,8 @@ private static XmlWriterSettings GetSettings()

public override void WriteStartAttribute(string prefix, string localName, string ns)
{
if (NoopInnerCall) return;
if (NoopInnerCall)
return;
if (_wroteFirstElementAttribute)
{
// flush xml buffer, so we can write with _textWrite at appropriate location
Expand All @@ -257,7 +275,8 @@ public override void WriteStartAttribute(string prefix, string localName, string
}
public override void WriteEndAttribute()
{
if (NoopInnerCall) return;
if (NoopInnerCall)
return;

base.WriteEndAttribute();

Expand All @@ -266,7 +285,8 @@ public override void WriteEndAttribute()
public override void WriteStartElement(string prefix, string localName, string ns)
{
_elements.Push((prefix, localName, ns));
if (NoopInnerCall) return;
if (NoopInnerCall)
return;

base.WriteStartElement(prefix, localName, ns);

Expand Down Expand Up @@ -303,7 +323,8 @@ private class CustomXamlFormatterBase
{
public virtual string FormatXaml(string xaml)
{
if (string.IsNullOrWhiteSpace(xaml)) return string.Empty;
if (string.IsNullOrWhiteSpace(xaml))
return string.Empty;
try
{
xaml = PreprocessXaml(xaml);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Items = new string[] { "Home", "Documents", "Design", "Northwind", "Images", "Fo
</smtx:XamlDisplay>

<smtx:XamlDisplay UniqueKey="BreadcrumbBarSamplePage_CustomDataTemplateSample"
smtx:XamlDisplayExtensions.IgnorePath="XamlDisplay\UserControl\Grid\StackPanel"
smtx:XamlDisplayExtensions.IgnorePath="XamlDisplay\StackPanel"
smtx:XamlDisplayExtensions.Header="BreadcrumbBar with Custom DataTemplate">
<!--
public class Folder
Expand All @@ -37,102 +37,42 @@ public ObservableCollection<Folder> Folders { get => GetProperty<ObservableColle
public Folder DisplayItem { get => GetProperty<Folder>(); set => SetProperty(value); }
-->

<UserControl>
<Grid HorizontalAlignment="Stretch"
RowSpacing="8">
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<StackPanel Spacing="8">
<muxc:BreadcrumbBar x:Name="breadcrumb"
ItemsSource="{Binding Data.Folders, Mode=OneWay}"
ItemClicked="OnBreadcrumb_ItemClicked">
<muxc:BreadcrumbBar.ItemTemplate>
<DataTemplate x:DataType="data:Folder">
<muxc:BreadcrumbBarItem Content="{Binding}">
<muxc:BreadcrumbBarItem.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</muxc:BreadcrumbBarItem.ContentTemplate>
</muxc:BreadcrumbBarItem>
</DataTemplate>
</muxc:BreadcrumbBar.ItemTemplate>
</muxc:BreadcrumbBar>
<TextBlock TextWrapping="WrapWholeWords">
<LineBreak />
<Span FontWeight="Bold">Name: </Span>
<Run Text="{Binding Data.DisplayItem.Name, Mode=OneWay}" />
<LineBreak />
<Span FontWeight="Bold">Items: </Span>
<Run Text="{Binding Data.DisplayItem.ItemCount, Mode=OneWay}" />
<LineBreak />
<Span FontWeight="Bold">Description: </Span>
<Run Text="{Binding Data.DisplayItem.Description, Mode=OneWay}" />
</TextBlock>
</StackPanel>

<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>

<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="WideState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="1060" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="breadcrumb.(Grid.Column)"
Value="0" />
<Setter Target="sideBar.(Grid.Column)"
Value="1" />
<Setter Target="sideBar.(Grid.RowSpan)"
Value="2" />
<Setter Target="breadcrumb.(Grid.RowSpan)"
Value="2" />
<Setter Target="sideBar.HorizontalAlignment"
Value="Right" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="NarrowState">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="breadcrumb.(Grid.Row)"
Value="0" />
<Setter Target="sideBar.(Grid.Row)"
Value="1" />
<Setter Target="sideBar.(Grid.ColumnSpan)"
Value="2" />
<Setter Target="breadcrumb.(Grid.ColumnSpan)"
Value="2" />
<Setter Target="sideBar.HorizontalAlignment"
Value="Stretch" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>

<StackPanel Spacing="8">
<muxc:BreadcrumbBar x:Name="breadcrumb"
ItemsSource="{Binding Data.Folders, Mode=OneWay}"
ItemClicked="OnBreadcrumb_ItemClicked">
<muxc:BreadcrumbBar.ItemTemplate>
<DataTemplate x:DataType="data:Folder">
<muxc:BreadcrumbBarItem Content="{Binding}">
<muxc:BreadcrumbBarItem.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</muxc:BreadcrumbBarItem.ContentTemplate>
</muxc:BreadcrumbBarItem>
</DataTemplate>
</muxc:BreadcrumbBar.ItemTemplate>
</muxc:BreadcrumbBar>
<TextBlock TextWrapping="WrapWholeWords">
<LineBreak />
<Span FontWeight="Bold">Name: </Span>
<Run Text="{Binding Data.DisplayItem.Name, Mode=OneWay}" />
<LineBreak />
<Span FontWeight="Bold">Items: </Span>
<Run Text="{Binding Data.DisplayItem.ItemCount, Mode=OneWay}" />
<LineBreak />
<Span FontWeight="Bold">Description: </Span>
<Run Text="{Binding Data.DisplayItem.Description, Mode=OneWay}" />
</TextBlock>
</StackPanel>

<Border x:Name="sideBar"
HorizontalAlignment="Right"
CornerRadius="8"
Padding="16"
MinWidth="180"
Background="{ThemeResource CardBackgroundFillColorDefaultBrush}">

<StackPanel Spacing="4">
<Button Content="Reset items"
HorizontalAlignment="Stretch"
Click="OnResetItems_Click" />
</StackPanel>
</Border>
</Grid>
</UserControl>
<smtx:XamlDisplayExtensions.Options>
<StackPanel Spacing="4">
<Button Content="Reset items"
HorizontalAlignment="Stretch"
Click="OnResetItems_Click" />
</StackPanel>
</smtx:XamlDisplayExtensions.Options>
</smtx:XamlDisplay>
</StackPanel>
</DataTemplate>
Expand Down
Loading