Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
db3f3ac
Initial PasswordBox "revealed" styles
nicolaihenriksen Aug 23, 2022
135cee0
Fixed alignment and initial wiring up
nicolaihenriksen Aug 23, 2022
f6e44e6
Showcasing style in sample app + alignment of reveal button
nicolaihenriksen Aug 23, 2022
66f1834
Showcase that password can still be set from XAML
nicolaihenriksen Aug 23, 2022
8d9c4f7
Change PasswordChanged event handler to weak event pattern
nicolaihenriksen Aug 24, 2022
22c0d31
Updated showcasing in the demo tool with a bit more stuff
nicolaihenriksen Aug 24, 2022
dd93d4a
Fixed CA warning
nicolaihenriksen Aug 24, 2022
9396459
Added UI test for 3-way binding
nicolaihenriksen Aug 29, 2022
df940a8
[Icon update detected by Github Action]. Auto generated pull request.…
github-actions[bot] Aug 30, 2022
8361fb8
Cursor fix (#2832)
nicolaihenriksen Aug 30, 2022
76eab1e
Fixed embedded dialog host style (#2826) (#2829)
Erapchu Aug 30, 2022
e6f81bf
Fix for 2596 - Align left margin for error message on outlined TextBo…
nicolaihenriksen Aug 30, 2022
6a08d55
Let DataGridCell handle mouse events itself when already editing (#2821)
nicolaihenriksen Aug 30, 2022
13b2483
Refactoring DataGridAssist input handling (#2824)
nicolaihenriksen Aug 30, 2022
63fed76
Initial PasswordBox "revealed" styles
nicolaihenriksen Aug 23, 2022
7798000
Fixed alignment and initial wiring up
nicolaihenriksen Aug 23, 2022
17aacdd
Showcasing style in sample app + alignment of reveal button
nicolaihenriksen Aug 23, 2022
1506b49
Showcase that password can still be set from XAML
nicolaihenriksen Aug 23, 2022
293f9cf
Change PasswordChanged event handler to weak event pattern
nicolaihenriksen Aug 24, 2022
a3c60ba
Updated showcasing in the demo tool with a bit more stuff
nicolaihenriksen Aug 24, 2022
438eae1
Fixed CA warning
nicolaihenriksen Aug 24, 2022
e0d208d
Added UI test for 3-way binding
nicolaihenriksen Aug 29, 2022
a7f23a4
Resolving merge conflicts
nicolaihenriksen Aug 30, 2022
cb8bbd1
Merge remote-tracking branch 'origin/featureRevealPasswordBox' into f…
nicolaihenriksen Aug 30, 2022
52c3c23
Resolving merge conflicts
nicolaihenriksen Aug 30, 2022
7b2c56e
Fixing hint proxy issues with password box
Keboo Aug 30, 2022
87070e3
Moved samples and added SMTX wrapper
nicolaihenriksen Aug 30, 2022
0f8187a
Apply cursor fix
nicolaihenriksen Aug 31, 2022
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
59 changes: 39 additions & 20 deletions MainDemo.Wpf/DataGrids.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,39 @@
d:DesignHeight="300"
d:DesignWidth="600"
d:DataContext="{d:DesignInstance domain:ListsAndGridsViewModel}">

<UserControl.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.DataGrid.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</UserControl.Resources>

<StackPanel>
<TextBlock
Style="{StaticResource MaterialDesignHeadline5TextBlock}"
Text="Custom Columns"/>

<StackPanel Orientation="Horizontal">
<TextBlock
Style="{StaticResource MaterialDesignHeadline5TextBlock}"
Text="Custom Columns"/>
<TextBlock
Style="{StaticResource MaterialDesignBody1TextBlock}" VerticalAlignment="Center"
Margin="25,0,10,0"
Text="SelectionUnit:"/>
<ComboBox x:Name="selectionUnitComboBox" ItemsSource="{Binding SelectionUnits}" SelectedIndex="0" VerticalAlignment="Center" />
</StackPanel>

<smtx:XamlDisplay UniqueKey="grids_1">
<DataGrid
ItemsSource="{Binding Items1}"
CanUserAddRows="False" AutoGenerateColumns="False"
HeadersVisibility="All">
HeadersVisibility="All"
SelectionUnit="{Binding ElementName=selectionUnitComboBox, Path=SelectedValue}">
<DataGrid.Resources>
<domain:BindingProxy
x:Key="DataContextProxy"
Data="{Binding}" />
</DataGrid.Resources>

<DataGrid.Columns>
<DataGridCheckBoxColumn
Binding="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}"
Expand All @@ -47,20 +55,20 @@
IsChecked="{Binding Data.IsAllItems1Selected, Source={StaticResource DataContextProxy}}"/>
</Border>
</DataGridCheckBoxColumn.Header>

<DataGridCheckBoxColumn.HeaderStyle>
<Style TargetType="{x:Type DataGridColumnHeader}" BasedOn="{StaticResource MaterialDesignDataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Center" />
</Style>
</DataGridCheckBoxColumn.HeaderStyle>
</DataGridCheckBoxColumn>

<DataGridTextColumn
Binding="{Binding Code}"
Header="Code"
ElementStyle="{StaticResource MaterialDesignDataGridTextColumnStyle}"
EditingElementStyle="{StaticResource MaterialDesignDataGridTextColumnEditingStyle}"/>

<!-- if you want to use the pop up style (MaterialDesignDataGridTextColumnPopupEditingStyle), you must use MaterialDataGridTextColumn -->
<materialDesign:DataGridTextColumn
Header="Name"
Expand All @@ -74,7 +82,7 @@
</Binding>
</materialDesign:DataGridTextColumn.Binding>
</materialDesign:DataGridTextColumn>

<!-- set a max length to get an indicator in the editor -->
<DataGridTextColumn
Header="Description"
Expand All @@ -88,7 +96,7 @@
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>

<materialDesign:DataGridTextColumn
Binding="{Binding Numeric}"
Header="Number with long header"
Expand All @@ -109,7 +117,7 @@
</Setter>
</Style>
</DataGridTextColumn.HeaderStyle>

<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource MaterialDesignDataGridTextColumnStyle}">
<Setter Property="HorizontalAlignment" Value="Right" />
Expand All @@ -134,9 +142,20 @@
<materialDesign:DataGridComboBoxColumn
Header="ComboBox with long list"
SelectedValueBinding="{Binding Files}"
ItemsSourceBinding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.Files}">
ItemsSourceBinding="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGrid}}, Path=DataContext.Files}" />

</materialDesign:DataGridComboBoxColumn>
<DataGridTemplateColumn Header="Template Column">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type domain:SelectableViewModel}">
<TextBlock Text="{Binding Name}" FontStyle="Italic" FontSize="14" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate DataType="{x:Type domain:SelectableViewModel}">
<TextBox Text="{Binding Name}" Foreground="{DynamicResource SecondaryHueMidBrush}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</smtx:XamlDisplay>
Expand All @@ -145,24 +164,24 @@
<materialDesign:PackIcon Kind="Information" Margin="0 0 5 0"/>
<TextBlock>DataGridComboBoxColumns are virtualized by default in the library</TextBlock>
</StackPanel>

<TextBlock
Style="{StaticResource MaterialDesignHeadline5TextBlock}"
Text="Auto Generated Columns"
Margin="0 24 0 0"/>

<smtx:XamlDisplay UniqueKey="grids_2">
<DataGrid
ItemsSource="{Binding Items2}"
CanUserAddRows="False"
SelectionUnit="Cell"
SelectionMode="Extended" />
</smtx:XamlDisplay>

<TextBlock
Style="{StaticResource MaterialDesignHeadline6TextBlock}"
Text="Custom Padding" Margin="0 24 0 0"/>

<smtx:XamlDisplay UniqueKey="grids_3">
<DataGrid
ItemsSource="{Binding Items3}"
Expand Down
86 changes: 40 additions & 46 deletions MainDemo.Wpf/Domain/DemoItem.cs
Original file line number Diff line number Diff line change
@@ -1,61 +1,55 @@
using System;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Controls;
namespace MaterialDesignDemo.Domain;

namespace MaterialDesignDemo.Domain
public class DemoItem : ViewModelBase
{
public class DemoItem : ViewModelBase
{
private readonly Type _contentType;
private readonly object? _dataContext;
private readonly Type _contentType;
private readonly object? _dataContext;

private object? _content;
private ScrollBarVisibility _horizontalScrollBarVisibilityRequirement;
private ScrollBarVisibility _verticalScrollBarVisibilityRequirement = ScrollBarVisibility.Auto;
private Thickness _marginRequirement = new(16);
private object? _content;
private ScrollBarVisibility _horizontalScrollBarVisibilityRequirement = ScrollBarVisibility.Auto;
private ScrollBarVisibility _verticalScrollBarVisibilityRequirement = ScrollBarVisibility.Auto;
private Thickness _marginRequirement = new(16);

public DemoItem(string name, Type contentType, IEnumerable<DocumentationLink> documentation, object? dataContext = null)
{
Name = name;
_contentType = contentType;
_dataContext = dataContext;
Documentation = documentation;
}
public DemoItem(string name, Type contentType, IEnumerable<DocumentationLink> documentation, object? dataContext = null)
{
Name = name;
_contentType = contentType;
_dataContext = dataContext;
Documentation = documentation;
}

public string Name { get; }
public string Name { get; }

public IEnumerable<DocumentationLink> Documentation { get; }
public IEnumerable<DocumentationLink> Documentation { get; }

public object? Content => _content ??= CreateContent();
public object? Content => _content ??= CreateContent();

public ScrollBarVisibility HorizontalScrollBarVisibilityRequirement
{
get => _horizontalScrollBarVisibilityRequirement;
set => SetProperty(ref _horizontalScrollBarVisibilityRequirement, value);
}
public ScrollBarVisibility HorizontalScrollBarVisibilityRequirement
{
get => _horizontalScrollBarVisibilityRequirement;
set => SetProperty(ref _horizontalScrollBarVisibilityRequirement, value);
}

public ScrollBarVisibility VerticalScrollBarVisibilityRequirement
{
get => _verticalScrollBarVisibilityRequirement;
set => SetProperty(ref _verticalScrollBarVisibilityRequirement, value);
}
public ScrollBarVisibility VerticalScrollBarVisibilityRequirement
{
get => _verticalScrollBarVisibilityRequirement;
set => SetProperty(ref _verticalScrollBarVisibilityRequirement, value);
}

public Thickness MarginRequirement
{
get => _marginRequirement;
set => SetProperty(ref _marginRequirement, value);
}
public Thickness MarginRequirement
{
get => _marginRequirement;
set => SetProperty(ref _marginRequirement, value);
}

private object? CreateContent()
private object? CreateContent()
{
var content = Activator.CreateInstance(_contentType);
if (_dataContext != null && content is FrameworkElement element)
{
var content = Activator.CreateInstance(_contentType);
if (_dataContext != null && content is FrameworkElement element)
{
element.DataContext = _dataContext;
}

return content;
element.DataContext = _dataContext;
}

return content;
}
}
63 changes: 62 additions & 1 deletion MainDemo.Wpf/Domain/FieldsViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
namespace MaterialDesignDemo.Domain
namespace MaterialDesignDemo.Domain
{
public class FieldsViewModel : ViewModelBase
{
private string? _name;
private string? _name2;
private string? _password1 = string.Empty;
private string? _password2 = "pre-filled";
private string? _password1Validated = "pre-filled";
private string? _password2Validated = "pre-filled";
private string? _text1;
private string? _text2;

public string? Name
{
Expand All @@ -17,7 +23,62 @@ public string? Name2
set => SetProperty(ref _name2, value);
}

public string? Text1
{
get => _text1;
set => SetProperty(ref _text1, value);
}

public string? Text2
{
get => _text2;
set => SetProperty(ref _text2, value);
}

public string? Password1
{
get => _password1;
set => SetProperty(ref _password1, value);
}

public string? Password2
{
get => _password2;
set => SetProperty(ref _password2, value);
}

public string? Password1Validated
{
get => _password1Validated;
set
{
if (string.IsNullOrEmpty(value))
throw new ArgumentException("Password cannot be empty");
SetProperty(ref _password1Validated, value);
}
}

public string? Password2Validated
{
get => _password2Validated;
set
{
if (string.IsNullOrEmpty(value))
throw new ArgumentException("Password cannot be empty");
SetProperty(ref _password2Validated, value);
}
}

public FieldsTestObject TestObject => new() { Name = "Mr. Test" };

public ICommand SetPassword1FromViewModelCommand { get; }
public ICommand SetPassword2FromViewModelCommand { get; }

public FieldsViewModel()
{
SetPassword1FromViewModelCommand = new AnotherCommandImplementation(_ => Password1 = "Set from code-behind!");
SetPassword2FromViewModelCommand = new AnotherCommandImplementation(_ => Password2 = "Set from code-behind!");
}
}

public class FieldsTestObject : ViewModelBase
Expand Down
3 changes: 2 additions & 1 deletion MainDemo.Wpf/Domain/ListsAndGridsViewModel.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System.Collections.Generic;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
Expand Down Expand Up @@ -89,5 +89,6 @@ private static ObservableCollection<SelectableViewModel> CreateData()

public IList<string> Files { get; }

public IEnumerable<DataGridSelectionUnit> SelectionUnits => new[] { DataGridSelectionUnit.FullRow, DataGridSelectionUnit.Cell, DataGridSelectionUnit.CellOrRowHeader };
}
}
Loading