mirror of
https://gitee.com/handyorg/HandyControl.git
synced 2024-12-02 03:47:48 +08:00
pulled #15 and made some adjustments
This commit is contained in:
parent
0bb9c67ff0
commit
44957a651d
@ -1,10 +1,8 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Controls.Primitives;
|
||||
using System.Windows.Media;
|
||||
using HandyControl.Data;
|
||||
|
||||
namespace HandyControl.Controls
|
||||
{
|
||||
@ -211,72 +209,66 @@ namespace HandyControl.Controls
|
||||
}
|
||||
}
|
||||
|
||||
public static DependencyProperty ShowRowNumberProperty = DependencyProperty.RegisterAttached("ShowRowNumber", typeof(bool), typeof(DataGridAttach), new FrameworkPropertyMetadata(false, OnShowRowNumberChanged));
|
||||
public static DependencyProperty ShowRowNumberProperty = DependencyProperty.RegisterAttached("ShowRowNumber",
|
||||
typeof(bool), typeof(DataGridAttach),
|
||||
new FrameworkPropertyMetadata(ValueBoxes.FalseBox, FrameworkPropertyMetadataOptions.Inherits, OnShowRowNumberChanged));
|
||||
|
||||
public static bool GetShowRowNumber(DependencyObject target)
|
||||
{
|
||||
return (bool)target.GetValue(ShowRowNumberProperty);
|
||||
}
|
||||
public static bool GetShowRowNumber(DependencyObject target) => (bool)target.GetValue(ShowRowNumberProperty);
|
||||
|
||||
public static void SetShowRowNumber(DependencyObject target, bool value)
|
||||
{
|
||||
target.SetValue(ShowRowNumberProperty, value);
|
||||
}
|
||||
public static void SetShowRowNumber(DependencyObject target, bool value) => target.SetValue(ShowRowNumberProperty, value);
|
||||
|
||||
private static void OnShowRowNumberChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
DataGrid dataGrid = target as DataGrid;
|
||||
if ((bool)e.NewValue == true)
|
||||
{
|
||||
EventHandler<DataGridRowEventArgs> loadedRowHandler = null;
|
||||
loadedRowHandler = (object sender, DataGridRowEventArgs ea) =>
|
||||
{
|
||||
if (GetShowRowNumber(dataGrid) == false)
|
||||
{
|
||||
dataGrid.LoadingRow -= loadedRowHandler;
|
||||
return;
|
||||
}
|
||||
ea.Row.Header = ea.Row.GetIndex() + 1;
|
||||
};
|
||||
dataGrid.LoadingRow += loadedRowHandler;
|
||||
if (!(target is DataGrid dataGrid)) return;
|
||||
var show = (bool)e.NewValue;
|
||||
|
||||
ItemsChangedEventHandler itemsChangedHandler = null;
|
||||
itemsChangedHandler = (object sender, ItemsChangedEventArgs ea) =>
|
||||
{
|
||||
if (GetShowRowNumber(dataGrid) == false)
|
||||
{
|
||||
dataGrid.ItemContainerGenerator.ItemsChanged -= itemsChangedHandler;
|
||||
return;
|
||||
}
|
||||
GetVisualChildCollection<DataGridRow>(dataGrid).
|
||||
ForEach(d => d.Header = d.GetIndex());
|
||||
};
|
||||
dataGrid.ItemContainerGenerator.ItemsChanged += itemsChangedHandler;
|
||||
if (show)
|
||||
{
|
||||
dataGrid.LoadingRow += DataGrid_LoadingRow;
|
||||
dataGrid.ItemContainerGenerator.ItemsChanged += ItemContainerGenerator_ItemsChanged;
|
||||
}
|
||||
}
|
||||
|
||||
private static List<T> GetVisualChildCollection<T>(object parent) where T : Visual
|
||||
{
|
||||
List<T> visualCollection = new List<T>();
|
||||
GetVisualChildCollection(parent as DependencyObject, visualCollection);
|
||||
return visualCollection;
|
||||
}
|
||||
|
||||
private static void GetVisualChildCollection<T>(DependencyObject parent, List<T> visualCollection) where T : Visual
|
||||
{
|
||||
int count = VisualTreeHelper.GetChildrenCount(parent);
|
||||
for (int i = 0; i < count; i++)
|
||||
else
|
||||
{
|
||||
DependencyObject child = VisualTreeHelper.GetChild(parent, i);
|
||||
if (child is T)
|
||||
dataGrid.LoadingRow -= DataGrid_LoadingRow;
|
||||
dataGrid.ItemContainerGenerator.ItemsChanged -= ItemContainerGenerator_ItemsChanged;
|
||||
}
|
||||
|
||||
UpdateItems(dataGrid.ItemContainerGenerator, show);
|
||||
}
|
||||
|
||||
private static void ItemContainerGenerator_ItemsChanged(object sender, ItemsChangedEventArgs e)
|
||||
{
|
||||
if (!(sender is ItemContainerGenerator generator)) return;
|
||||
UpdateItems(generator);
|
||||
}
|
||||
|
||||
private static void UpdateItems(ItemContainerGenerator generator, bool show = true)
|
||||
{
|
||||
var count = generator.Items.Count;
|
||||
if (show)
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
visualCollection.Add(child as T);
|
||||
var row = (DataGridRow)generator.ContainerFromIndex(i);
|
||||
if (row != null)
|
||||
{
|
||||
row.Header = (i + 1).ToString();
|
||||
}
|
||||
}
|
||||
if (child != null)
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
GetVisualChildCollection(child, visualCollection);
|
||||
var row = (DataGridRow)generator.ContainerFromIndex(i);
|
||||
if (row != null)
|
||||
{
|
||||
row.Header = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void DataGrid_LoadingRow(object sender, DataGridRowEventArgs e) => e.Row.Header = (e.Row.GetIndex() + 1).ToString();
|
||||
}
|
||||
}
|
||||
|
@ -119,7 +119,7 @@ namespace HandyControl.Controls
|
||||
|
||||
private Storyboard GetStoryboard(string newTransition)
|
||||
{
|
||||
var presentationGroup = VisualStates.TryGetVisualStateGroup(this, PresentationGroup);
|
||||
var presentationGroup = VisualHelper.TryGetVisualStateGroup(this, PresentationGroup);
|
||||
Storyboard newStoryboard = null;
|
||||
if (presentationGroup != null)
|
||||
newStoryboard = presentationGroup.States
|
||||
@ -218,7 +218,7 @@ namespace HandyControl.Controls
|
||||
var newStoryboard = source.GetStoryboard(newTransition);
|
||||
|
||||
if (newStoryboard == null)
|
||||
if (VisualStates.TryGetVisualStateGroup(source, PresentationGroup) == null)
|
||||
if (VisualHelper.TryGetVisualStateGroup(source, PresentationGroup) == null)
|
||||
{
|
||||
source.CurrentTransition = null;
|
||||
}
|
||||
|
@ -204,7 +204,7 @@
|
||||
<Compile Include="Tools\RegularPatterns.cs" />
|
||||
<Compile Include="Tools\ResourceHelper.cs" />
|
||||
<Compile Include="Tools\ValidateHelper.cs" />
|
||||
<Compile Include="Tools\VisualStates.cs" />
|
||||
<Compile Include="Tools\VisualHelper.cs" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Page Include="Themes\Basic\Basic.xaml">
|
||||
|
@ -82,14 +82,15 @@
|
||||
<DataGridDetailsPresenter Margin="0,6" Grid.Column="1" Grid.Row="1" SelectiveScrollingGrid.SelectiveScrollingOrientation="{Binding AreRowDetailsFrozen, ConverterParameter={x:Static SelectiveScrollingOrientation.Vertical}, Converter={x:Static DataGrid.RowDetailsScrollingConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" Visibility="{TemplateBinding DetailsVisibility}"/>
|
||||
<DataGridRowHeader Grid.Row="0" Grid.Column="0" SelectiveScrollingGrid.SelectiveScrollingOrientation="Vertical" Visibility="{Binding HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Row}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"/>
|
||||
</SelectiveScrollingGrid>
|
||||
<ControlTemplate.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="{DynamicResource PrimaryBrush}"/>
|
||||
</Trigger>
|
||||
</ControlTemplate.Triggers>
|
||||
</ControlTemplate>
|
||||
</Setter.Value>
|
||||
</Setter>
|
||||
<Style.Triggers>
|
||||
<Trigger Property="IsSelected" Value="True">
|
||||
<Setter Property="Background" Value="{DynamicResource PrimaryBrush}"/>
|
||||
<Setter Property="TextElement.Foreground" Value="White"/>
|
||||
</Trigger>
|
||||
</Style.Triggers>
|
||||
</Style>
|
||||
<Style x:Key="ColumnHeaderGripperStyle" TargetType="Thumb">
|
||||
<Setter Property="Width" Value="8"/>
|
||||
|
@ -4,7 +4,7 @@ using System.Windows.Media;
|
||||
|
||||
namespace HandyControl.Tools
|
||||
{
|
||||
public class VisualStates
|
||||
internal class VisualHelper
|
||||
{
|
||||
public static VisualStateGroup TryGetVisualStateGroup(DependencyObject dependencyObject, string groupName)
|
||||
{
|
@ -6,26 +6,47 @@
|
||||
xmlns:langs="clr-namespace:HandyControlDemo.Properties.Langs"
|
||||
xmlns:controls="clr-namespace:HandyControl.Controls;assembly=HandyControl">
|
||||
<controls:TransitioningContentControl>
|
||||
<DataGrid HeadersVisibility="All" RowHeaderWidth="60" AutoGenerateColumns="False" ItemsSource="{Binding DataList}">
|
||||
<DataGrid.RowHeaderTemplate>
|
||||
<DataTemplate>
|
||||
<CheckBox IsChecked="{Binding IsSelected,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGridRow}}"/>
|
||||
</DataTemplate>
|
||||
</DataGrid.RowHeaderTemplate>
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn IsReadOnly="True" Width="80" CanUserResize="False" Binding="{Binding Index}" Header="{x:Static langs:Lang.Index}"/>
|
||||
<DataGridTemplateColumn Width="50" CanUserResize="False">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<TabControl Style="{StaticResource TabControlInLine}">
|
||||
<TabItem Header="Common">
|
||||
<DataGrid HeadersVisibility="All" RowHeaderWidth="60" AutoGenerateColumns="False" ItemsSource="{Binding DataList}">
|
||||
<DataGrid.RowHeaderTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding ImgPath}" Width="32" Height="32" Stretch="Uniform"/>
|
||||
<CheckBox IsChecked="{Binding IsSelected,RelativeSource={RelativeSource FindAncestor,AncestorType=DataGridRow}}"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Width="1*" Binding="{Binding Name}" Header="{x:Static langs:Lang.Name}"/>
|
||||
<DataGridCheckBoxColumn Width="100" CanUserResize="False" Binding="{Binding IsSelected}" Header="{x:Static langs:Lang.Selected}"/>
|
||||
<DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource DemoTypes}}" Width="100" CanUserResize="False" SelectedValueBinding="{Binding Type}" Header="{x:Static langs:Lang.Type}"/>
|
||||
<DataGridTextColumn Width="1*" Binding="{Binding Remark}" Header="{x:Static langs:Lang.Remark}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</DataGrid.RowHeaderTemplate>
|
||||
<DataGrid.Columns>
|
||||
<DataGridTextColumn IsReadOnly="True" Width="80" CanUserResize="False" Binding="{Binding Index}" Header="{x:Static langs:Lang.Index}"/>
|
||||
<DataGridTemplateColumn Width="50" CanUserResize="False">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding ImgPath}" Width="32" Height="32" Stretch="Uniform"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Width="1*" Binding="{Binding Name}" Header="{x:Static langs:Lang.Name}"/>
|
||||
<DataGridCheckBoxColumn Width="100" CanUserResize="False" Binding="{Binding IsSelected}" Header="{x:Static langs:Lang.Selected}"/>
|
||||
<DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource DemoTypes}}" Width="100" CanUserResize="False" SelectedValueBinding="{Binding Type}" Header="{x:Static langs:Lang.Type}"/>
|
||||
<DataGridTextColumn Width="1*" Binding="{Binding Remark}" Header="{x:Static langs:Lang.Remark}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</TabItem>
|
||||
<TabItem Header="ShowRowNumber">
|
||||
<DataGrid HeadersVisibility="All" RowHeaderWidth="60" AutoGenerateColumns="False" ItemsSource="{Binding DataList}" controls:DataGridAttach.ShowRowNumber="True">
|
||||
<DataGrid.Columns>
|
||||
<DataGridTemplateColumn Width="50" CanUserResize="False">
|
||||
<DataGridTemplateColumn.CellTemplate>
|
||||
<DataTemplate>
|
||||
<Image Source="{Binding ImgPath}" Width="32" Height="32" Stretch="Uniform"/>
|
||||
</DataTemplate>
|
||||
</DataGridTemplateColumn.CellTemplate>
|
||||
</DataGridTemplateColumn>
|
||||
<DataGridTextColumn Width="1*" Binding="{Binding Name}" Header="{x:Static langs:Lang.Name}"/>
|
||||
<DataGridCheckBoxColumn Width="100" CanUserResize="False" Binding="{Binding IsSelected}" Header="{x:Static langs:Lang.Selected}"/>
|
||||
<DataGridComboBoxColumn ItemsSource="{Binding Source={StaticResource DemoTypes}}" Width="100" CanUserResize="False" SelectedValueBinding="{Binding Type}" Header="{x:Static langs:Lang.Type}"/>
|
||||
<DataGridTextColumn Width="1*" Binding="{Binding Remark}" Header="{x:Static langs:Lang.Remark}"/>
|
||||
</DataGrid.Columns>
|
||||
</DataGrid>
|
||||
</TabItem>
|
||||
</TabControl>
|
||||
</controls:TransitioningContentControl>
|
||||
</UserControl>
|
||||
|
Loading…
Reference in New Issue
Block a user