标签: wpfdatagrid

禁用WPF数据网格中列之间的tabstop

我有一个带有多个列的WPF Toolkit数据网格.我试图获得一个行为,您可以使用选项卡切换到网格,然后使用单个选项卡再次选项卡.例如,我不希望选中网格的所有列或单元格,只需进入一次,然后退出.

有没有一个简单的解决方案,我尝试将TabNavigation设置为Once,同时禁用TabStop(未在下面的代码中显示)并将列上的TabNavigation设置为None,但没有成功.

有什么我缺少或我需要在代码中处理Tab键吗?

        <my:DataGrid Name="datagrid"
                     AutoGenerateColumns="False" IsReadOnly="True"
                     CanUserAddRows="False" CanUserDeleteRows="False"
                     Background="White"
                     KeyboardNavigation.TabNavigation="Once">
            <my:DataGrid.Columns>
                <my:DataGridTextColumn x:Name="ID" Header="ID" Width="1*" ></my:DataGridTextColumn>
                <my:DataGridTextColumn x:Name="Ticker" Header="Ticker" Width="1*" KeyboardNavigation.TabNavigation="None"></my:DataGridTextColumn>
                <my:DataGridTextColumn x:Name="OfficialName" Header="Name" Width="3*" KeyboardNavigation.TabNavigation="None"></my:DataGridTextColumn>
            </my:DataGrid.Columns>
        </my:DataGrid>
Run Code Online (Sandbox Code Playgroud)

wpf xaml tabstop wpfdatagrid

15
推荐指数
2
解决办法
2万
查看次数

wpf 4.0 datagrid模板列双向绑定问题

我正在使用wpf 4.0中的datagrid.这有一个包含复选框的TemplateColumn.复选框的IsChecked属性通过绑定设置.

问题是,即使我明确指定绑定模式为TwoWay,它只能在一个方向上工作.

我必须提到,相同的代码在.net 3.5中与wpf工具包中的datagrid完美配合.

请查看.xaml和.cs内容.

提前致谢,

罗兰

<Window.Resources>
    <DataTemplate
        x:Key="IsSelectedColumnTemplate">
        <CheckBox
            IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"
            />
    </DataTemplate>
</Window.Resources>
<Grid>
    <DataGrid
        x:Name="dataGrid"
        AutoGenerateColumns="false"
        CanUserAddRows="False"
        CanUserDeleteRows="False"
        HeadersVisibility="Column"
        ItemsSource="{Binding}"
        >
        <DataGrid.Columns>
            <DataGridTemplateColumn 
                Header="Preselected"
                x:Name="myIsSelectedColumn" 
                CellTemplate="{StaticResource IsSelectedColumnTemplate}"
                CanUserSort="True"
                SortMemberPath="Orientation"
                Width="Auto"
                />
        </DataGrid.Columns>
    </DataGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)

和相关的.cs内容:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        ObservableCollection<DataObject> DataSource = new ObservableCollection<DataObject>();
        DataSource.Add(new DataObject());    
        DataSource.Add(new DataObject());          
        dataGrid.ItemsSource = DataSource;
    }
}

public class DataObject : DependencyObject
{
    public bool IsSelected
    {
        get { return (bool)GetValue(IsSelectedProperty); …
Run Code Online (Sandbox Code Playgroud)

wpf binding wpfdatagrid c#-4.0

15
推荐指数
2
解决办法
2万
查看次数

DataGrid创建RadioButton列

我有绑定到DataGrid的对象.我创建了一个绑定到对象的Is Default属性的单选按钮列.

当应用程序启动时,正确的项目显示为默认值,但是绑定随后不会更新.我想要的行为是用户检查一个单选框并使该对象成为默认值.

        <DataGrid CanUserAddRows="False" AutoGenerateColumns="False" Name="TEst" >
        <DataGrid.Columns >
            <DataGridTextColumn Header="Value" Binding="{Binding Path=Name, Mode=OneTime}"/>

            <DataGridTemplateColumn Header="Is Default">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton GroupName="Test" IsChecked="{Binding IsDefault}" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

        </DataGrid.Columns>
    </DataGrid>

 private class Test : INotifyPropertyChanged
    {
        public string Name
        {
            get;
            set;
        }
        bool isDefult;
        public bool IsDefault
        {
            get
            {
                return isDefult;
            }
            set
            {
                isDefult = value;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

    public MainWindow()
    {
        this.InitializeComponent();
        Test[] ya = new Test[] { new Test { Name …
Run Code Online (Sandbox Code Playgroud)

.net wpf binding .net-4.0 wpfdatagrid

15
推荐指数
1
解决办法
1万
查看次数

Datagrid行的静态数据是否可以纯粹在XAML中定义,即后面没有代码?

我有静态数据,我想以Datagrid格式显示.这些值仅用于显示目的,不会更改.它可以作为Datagrid控件的某种子标签添加,以便我可以避免代码隐藏中的任何内容吗?

它必须是Datagrid控件,因为目的是试验和演示某些Datagrid UI功能与虚假blah blah内容.

如果无法获得纯XAML内容,那么为数据网格设置虚拟内容的最佳(快速和脏)方法是什么?可以在没有写课程等的情况下完成吗?

wpf xaml datagrid wpfdatagrid

15
推荐指数
3
解决办法
2万
查看次数

将焦点移动到输入键上的下一个单元格按WPF DataGrid?

我想要一个可以的Custom DataGrid,

  1. Enter如果处于编辑模式,也会在按下键时移动到下一个单元格.
  2. 当达到当前行中的最后一列时,焦点应移动到下一行的第一个单元格.
  3. 在到达下一个单元格时,如果单元格是可编辑的,它应该自动变为可编辑.
  4. 如果单元格包含ComboBox非组合框,则组合框应该是DropDownOpen.

请帮帮我.我在过去的几天里一直在尝试创建一个Custom DataGrid并编写了一些代码

protected override void OnPreviewKeyDown(System.Windows.Input.KeyEventArgs e)
Run Code Online (Sandbox Code Playgroud)

但我失败了.

c# wpf mvvm wpfdatagrid

15
推荐指数
3
解决办法
2万
查看次数

如何使最后一个DataGrid的列占据整个左侧空间?

第一!我知道这似乎是一种重复,但事实并非如此.

我有一个网格作为数据模板DataGrid.RowDetails.它有三列:两列Width="Auto"和三维列Width="*"

<DataTemplate x:Key="NotEmptyDistributionsTemplateKey">
    <DataGrid ItemsSource="{Binding SoftwareVersionDistributions}"
        CanUserAddRows="False"
        CanUserDeleteRows="False"
        CanUserReorderColumns="False"
        CanUserResizeColumns="True"
        CanUserSortColumns="False"
        IsReadOnly="True"
        CanUserResizeRows="False"
        AutoGenerateColumns="False"
        RowHeaderWidth="0"
        Margin="20,5"
        HorizontalAlignment="Stretch">
        <DataGrid.Columns>
            <DataGridTextColumn 
                Header="Architecture" 
                Binding="{Binding SoftwareArchitecture.Name, TargetNullValue=???, FallbackValue=???}"
                Width="Auto"/>
            <DataGridTextColumn 
                Header="Language" 
                Binding="{Binding SysCodepage.Title, TargetNullValue=???, FallbackValue=???}" 
                Width="Auto"/>
            <DataGridHyperlinkColumn 
                Header="Link" 
                Binding="{Binding DownloadLink}"
                Width="*" 
                CanUserResize="False"/>
        </DataGrid.Columns>
    </DataGrid>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

如果Grid嵌套在单元格中,此模板恰好显示3列.但是当它被用作RowDetaislTemplate第4个空列出现时.这让我很生气.

有没有人知道为什么会发生这种情况?

更新1.看起来如何:

在此输入图像描述

更新2.

最后我找到了灵魂.刚刚添加ScrollViewer.HorizontalScrollBarVisibility="Disabled"

现在可以了:

在此输入图像描述

但我无法理解这种奇怪的行为.

更新3(可能对某人有帮助)

最近我们发现了一个用户拥有的错误,开发人员没有.该错误再次涉及DataGrid的宽度和对齐方式.好吧,可能这不是一个真正的错误,但我们有不同的控件行为.
研究表明,安装.net framework 4.5安装程序时还更新了.net framework 4.0.此更新以某种方式改变了DataGrid的行为.(对于预期的一个)
我们要求我们的用户安装框架4.5并且问题消失了.虽然我们的应用仍然针对.net 4.0

wpf wpfdatagrid

15
推荐指数
1
解决办法
2680
查看次数

在AddNew或EditItem事务期间不允许"DeferRefresh"

我在GUI中有一个选项卡控件,其中一个选项卡中有WPF 4.0数据网格.当我单击网格中的单元格并编辑某些内容然后切换选项卡时,我收到了延迟刷新错误:

在AddNew或EditItem事务期间不允许使用DeferRefresh'.

因此,datagrid.CancelEdit(DataGridEditingUnit.Row)当切换选项卡以取消任何待处理的编辑并且延迟刷新问题消失时,我会调用.

但我真正想做的是CommitEdit()让用户不必再次重新输入数据.

datagrid.CommitEdit(DataGridEditingUnit.Row, true)没有为我工作.我得到以下错误CommitEnd():

暂停调度程序处理时无法执行此操作.

PS:我已经尝试过datagrid.CommitEdit()和datagrid.CommitEdit(DataGridEditingUnit.Column,true),但它没有用.

wpf wpfdatagrid

15
推荐指数
2
解决办法
1万
查看次数

WPF DataGrid:重新排序行?

我正在创建一个WPF数据网格,我希望能够通过拖放重新排序行,如下所示:我单击一行并向上或向下拖动它.像我一样,如果我释放鼠标,标记会显示行将被丢弃的位置.当我释放鼠标时,拖动的行将插入标记指示的位置.

有没有人看到任何文章或博客文章,说明如何做到这一点?如果我不需要,我不想重新发明轮子,谷歌也没有发现任何东西.谢谢.

.net wpf datagrid drag-and-drop wpfdatagrid

14
推荐指数
2
解决办法
1万
查看次数

WPF数据网格粘贴

我在从csv粘贴到wpf数据网格时遇到了麻烦 - 我已经按照这里的建议进行了操作

http://blogs.msdn.com/b/vinsibal/archive/2008/09/25/pasting-content-to-new-rows-on-the-wpf-datagrid.aspx

并且代码exectues没有问题 - 但是,似乎创建了所有新行,但只有第一行填充了数据.数据似乎不断被覆盖,以便剪贴板数据中的最后一项填充在第一行,所有其他行都是空白.我知道这一定是一个索引问题,但我无法追踪它.

此外,当我查看网格的可绑定集合中的对象时,它们都没有任何数据.在列的OnPastingCellClipboardContent中是否存在某些错误(也许是数据转换)?

任何想法(见下面的代码)

protected virtual void OnExecutedPaste(object sender, ExecutedRoutedEventArgs args)
    {
        // parse the clipboard data
        List<string[]> rowData = ClipboardHelper.ParseClipboardData();
        bool hasAddedNewRow = false;

        // call OnPastingCellClipboardContent for each cell
        int minRowIndex = Math.Max(Items.IndexOf(CurrentItem), 0);
        int maxRowIndex = Items.Count - 1;
        int minColumnDisplayIndex = (SelectionUnit != DataGridSelectionUnit.FullRow) ? Columns.IndexOf(CurrentColumn) : 0;
        int maxColumnDisplayIndex = Columns.Count - 1;

        int rowDataIndex = 0;
        for (int i = minRowIndex; i <= maxRowIndex && rowDataIndex < rowData.Count; i++, …
Run Code Online (Sandbox Code Playgroud)

wpf wpf-controls wpfdatagrid

14
推荐指数
2
解决办法
2万
查看次数

如何将DataGridTemplateColumn.Visibility绑定到DataGrid.ItemsSource之外的属性?

我需要将Visibilitya DataGridTemplateColumn的一个属性绑定到一个外面的属性DataGrid.ItemsSource,因为我需要将所有行中的这个列绑定到其中的一个属性ViewModel,但据我所知你只是可以将它绑定到内部的某个属性,ItemsSource或者你应该使用ElementStyle,EditingElementStyle 我已经尝试过这段代码:

 <DataGridTemplateColumn Header="post" 
                      Visibility="{Binding DataContext.ProjectPostVisibility
                    , RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MvvmCommonControl:DataGrid}}"/>
Run Code Online (Sandbox Code Playgroud)

我确定我的绑定是正确的,因为当我绑定DataGridCell.Visibility下面的代码时它工作正常:

<DataGridTemplateColumn Header="post">
    <DataGridTemplateColumn.CellStyle>
                        <Style TargetType="DataGridCell">
                            <Setter Property="Visibility" Value="{Binding DataContext.ProjectPostVisibility,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=MvvmCommonControl:DataGrid}}"/>
                        </Style>
                    </DataGridTemplateColumn.CellStyle>
</DataGridTemplateColumn >
Run Code Online (Sandbox Code Playgroud)

data-binding wpf binding wpfdatagrid

14
推荐指数
3
解决办法
1万
查看次数