.net WPF自定义数据网格模板
我的自定义控件有问题…我需要帮助 我有一个自定义datagrid控件,如下所示:.net WPF自定义数据网格模板,.net,wpf,xaml,templates,datagrid,.net,Wpf,Xaml,Templates,Datagrid,我的自定义控件有问题…我需要帮助 我有一个自定义datagrid控件,如下所示: Public Class DataGridExtended Inherits DataGrid Sub New() Dim dict = New ResourceDictionary() dict.Source = New Uri("DataGridExtendedStyle.xaml", UriKind.RelativeOrAbsolute) Me.Resources.MergedDic
Public Class DataGridExtended
Inherits DataGrid
Sub New()
Dim dict = New ResourceDictionary()
dict.Source = New Uri("DataGridExtendedStyle.xaml", UriKind.RelativeOrAbsolute)
Me.Resources.MergedDictionaries.Add(dict)
Me.SetValue(DataGrid.StyleProperty, Me.FindResource("datagridExtendedStyle"))
End Sub
End Class
这就是风格:
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options">
<Style
x:Key="datagridExtendedStyle"
TargetType="{x:Type DataGrid}">
<Setter
Property="Template">
<Setter.Value>
<ControlTemplate
TargetType="DataGrid">
<DockPanel
LastChildFill="True">
<!-- TextBox -->
<TextBox
DockPanel.Dock="Top"
Text="When I click here changes edited on datagrid row are not updated on entity properties, Why? It only works when I change selected row on datagrid."
TextWrapping="Wrap"
Height="40" />
<!-- DataGrid -->
<ScrollViewer
Name="DG_ScrollViewer"
Focusable="false">
<ScrollViewer.Template>
<ControlTemplate
TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="Auto" />
<ColumnDefinition
Width="*" />
<ColumnDefinition
Width="Auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition
Height="Auto" />
<RowDefinition
Height="*" />
<RowDefinition
Height="Auto" />
</Grid.RowDefinitions>
<Button
Command="{x:Static DataGrid.SelectAllCommand}"
Focusable="false"
Style="{DynamicResource {ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}}"
Visibility="{Binding Path=HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.All}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}"
Width="{Binding Path=CellsPanelHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<DataGridColumnHeadersPresenter
Name="PART_ColumnHeadersPresenter"
Grid.Column="1"
Visibility="{Binding Path=HeadersVisibility, ConverterParameter={x:Static DataGridHeadersVisibility.Column}, Converter={x:Static DataGrid.HeadersVisibilityConverter}, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<ScrollContentPresenter
Name="PART_ScrollContentPresenter"
CanContentScroll="{TemplateBinding CanContentScroll}"
Grid.ColumnSpan="2"
Grid.Row="1" />
<ScrollBar
Name="PART_VerticalScrollBar"
Grid.Column="2"
Maximum="{TemplateBinding ScrollableHeight}"
Orientation="Vertical"
Grid.Row="1"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
Value="{Binding Path=VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
ViewportSize="{TemplateBinding ViewportHeight}" />
<Grid
Grid.Column="1"
Grid.Row="2">
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="{Binding Path=NonFrozenColumnsViewportHorizontalOffset, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />
<ColumnDefinition
Width="*" />
</Grid.ColumnDefinitions>
<ScrollBar
Name="PART_HorizontalScrollBar"
Grid.Column="1"
Maximum="{TemplateBinding ScrollableWidth}"
Orientation="Horizontal"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
Value="{Binding Path=HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent}}"
ViewportSize="{TemplateBinding ViewportWidth}" />
</Grid>
</Grid>
</ControlTemplate>
</ScrollViewer.Template>
<ItemsPresenter
Name="PART_Items"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" />
</ScrollViewer>
</DockPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ResourceDictionary>
现在,我有这个问题
如果我在datagrid上编辑单元格,然后单击顶部文本框,则在datagrid行上编辑的更改不会提交并更新为源实体属性。为什么?
我怎样才能避免这种行为
当我点击顶部的文本框时,我希望datagrid的行为就像我通过外部点击控制一样?你怎么能做到
下面是下载示例项目的链接:
谢谢