使一组DataGrid列具有比例宽度的最佳/正确方法是什么(Width="\*"),但是它们的最小宽度至少是其内容的宽度?目前,如果我使用Width="*",那么列保持完全成比例,但内容如果列太薄,会被裁剪.如果我使用Width="Auto",那么列的大小完全符合它们的内容,但这使它们具有不同的大小.
我想要的实际上是两者的组合,例如Width="\*",MinWidth="Auto"当有额外的宽度时,列将全部空出到相等的宽度,但是当网格变小时,内容永远不会被裁剪.
可悲的是,MinWidth="Auto"不存在,所以我想我需要绑定列的MinWidth属性,但很难弄清楚我将它绑定到什么.
如何告诉WPF "MinWidth="列的最宽内容的宽度?
我有两个WPF工具包DataGrids,我希望当用户调整第一个网格中第一列的大小时,它会调整第二个网格中第一列的大小.我已经尝试DataGridColumn将第二个网格中的宽度绑定到第一个网格中的相应列,但它不起作用.我更喜欢使用所有xaml,但我也可以使用后面的代码.
<tk:DataGrid Width="100" Height="100">
<tk:DataGrid.Columns>
<tk:DataGridTextColumn x:Name="Column1" Width="50"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
<tk:DataGrid Width="100" Height="100">
<tk:DataGrid.Columns>
<tk:DataGridTextColumn x:Name="Column1Copy" Width="{Binding Path=ActualWidth, ElementName=Column1}"/>
</tk:DataGrid.Columns>
</tk:DataGrid>
Run Code Online (Sandbox Code Playgroud)
我也试过绑定Width而不是ActualWidth,但都不起作用.
任何帮助是极大的赞赏.
我尝试了以下方法:
<tk:DataGridTextColumn
Header="Item"
Binding="{Binding Item.Title}"
ToolTipService.ToolTip="{Binding Item.Description}" />
Run Code Online (Sandbox Code Playgroud)
我没有看到任何工具提示.
有任何想法吗?甚至实施了吗?
我的代码如下:
void mainDataContextObj_CutSelectedColumnEvent(string columnId)
{
IList<DataGridColumn> columns = dg.Columns;
for(int i=2; i<dg.Columns.Count; i++)
{
DataGridColumnHeader headerObj = dg.Columns[i].Header as DataGridColumnHeader;
//This always returns headerObj as null!!!
}
}
Run Code Online (Sandbox Code Playgroud)
我需要DataGridColumnHeader从专栏.我哪里错了?
我花了几个小时看这个没有结果.
我只想拥有一个DataGridX列的列,以保持其相对宽度Grid.
所以,例如:
我已经设置了一个附加到DataGrid项目模板的样式.我尝试将宽度绑定到DataGrid自身(通常是循环引用),另一个对象(值进来,但DataGridColumn不更新),使用转换器(转换器获取正确的值,然后设置值的列,但尽管返回的数字不同,但列的宽度永远不会改变).
我已经SizeChanged在DataGrid自身上设置了一个事件并专门设置了列的宽度,DID更改了列的值,但是每个size事件都会导致另一个size事件等...等等...
我自己明白这一点显然太愚蠢了,所以如果有人能给我一个简单的例子,我想象的应该是一件简单的事情,我会非常感激.
所以,为了清楚起见,我正在寻找的是一个DataGridX列的列,它保持固定的DataGrid宽度百分比本身 - 非常像HTML中的任何表本身.
提前致谢.
我希望DataGridColumn或AdvancedDataGridColumn会自动调整其宽度,以便适合其中的内容.
我刚开始弯曲.我想实现HTML表格之类的东西.
渲染的数据是简单的文本.有些行文本较少,在这种情况下我想自动扩展DataGridColumn的宽度.
任何帮助解决这个问题.
提前致谢
我在我的数据网格中找到了Columns集合,并希望迭代它以找到某个列Name.但是,我无法弄清楚如何处理列的x:Name属性.这个xaml说明了我的DataGridTextColumn和DataGridTemplateColumn的问题:
<t:DataGrid x:Name="dgEmployees" ItemsSource="{Binding Employees}"
AutoGenerateColumns="false" Height="300" >
<t:DataGrid.Columns>
<t:DataGridTextColumn x:Name="FirstName" Header="FirstName"
Binding="{Binding FirstName}" />
<t:DataGridTemplateColumn x:Name="LastName" Header="LastName" >
<t:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding LastName}" />
</DataTemplate>
</t:DataGridTemplateColumn.CellTemplate>
</t:DataGridTemplateColumn>
</t:DataGrid.Columns>
</t:DataGrid>
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
DataGrid dg = this.dgEmployees;
foreach (var column in dg.Columns)
{
System.Console.WriteLine("name: " + (string)column.GetValue(NameProperty));
}
Run Code Online (Sandbox Code Playgroud)
在运行时,不存在任何值; column.GetValue不返回任何内容.使用Snoop,我确认DataGridTextColumn或DataGridTemplateColumn上没有Name属性.
我错过了什么?
所以,例如我有一些简单模型的MVVM WPF应用程序:
public class MyObject
{
public string F1 { get; set; }
public string F2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和创建3行的简单视图模型:
public class MyViewModel
{
public ObservableCollection<MyObject> Objects { get; set; }
public MyViewModel()
{
Objects = new ObservableCollection<MyObject>
{
new MyObject{F1 = "V1",F2 = "B1"},
new MyObject{F1 = "V2",F2 = "B2"},
new MyObject{F1 = "V3",F2 = "V3"}
};
}
}
Run Code Online (Sandbox Code Playgroud)
在视图中我有一个DataGrid手动定义的列和我设置的每一列CellStyle.两种样式都在Window.Resources块中定义.但对于第一列,我使用StaticResource和第二列DynamicResource
查看XAML:
<Window x:Class="WpfApplication12.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" …Run Code Online (Sandbox Code Playgroud) 我以LogicalTreeHelper.GetParent()递归方式使用该方法来查找各种其他WPF元素的根元素.几乎所有东西都可以正常工作,但是DataGridColumn失败了DataGridTextColumn.我发现它DataGridColumn不是逻辑树和视觉树的一部分.我可以以某种方式找到DataGrid它属于(然后从网格中获取根)?
阅读MSDN文档我找不到合适的解决方案.谢谢.
我的代码找到逻辑根:
private DependencyObject FindLogicalRoot(DependencyObject obj)
{
if (obj == null)
return null;
else
{
var parent = LogicalTreeHelper.GetParent(obj);
return parent != null ? FindLogicalRoot(parent) : obj;
}
}
Run Code Online (Sandbox Code Playgroud) 有没有办法将工具提示添加到DataGridColumn标头,仍然保留排序功能.下面的代码不起作用(它不显示工具提示)
<toolkit:DataGridTextColumn Header="Test" Width="70" Binding="{Binding TestText}" ToolTipService.ToolTip="{Binding TestText}">
Run Code Online (Sandbox Code Playgroud)
当我使用下面的代码时
<toolkit:DataGridTemplateColumn Header="Test" Width="70">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding TestText}" ToolTip="{Binding TestText}" />
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
该列失去了排序功能..帮助!
datagridcolumn ×10
wpf ×9
datagrid ×7
width ×3
wpf-controls ×2
wpfdatagrid ×2
apache-flex ×1
binding ×1
c# ×1
header ×1
wpftoolkit ×1
xaml ×1