我正在使用WPFtoolkit DataGrid,我必须将文本换行DataGridTextColumn或者我必须ToolTip在文本列中添加一个.我在网上搜索过,但我找不到合适的解决方案.期待您的宝贵建议......
我正在尝试更改DataGridTextColumn的颜色.
这是我正在做的事情:
<DataGridTextColumn
Header="Status"
Binding="{Binding IsActive,
Converter= {StaticResource BoolToStatusConverter}}"
Foreground="{Binding Path=IsActive,
Converter={StaticResource BoolToColorConverter}}"/>
Run Code Online (Sandbox Code Playgroud)
文本设置正确,但颜色不会改变,我收到以下错误:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or
FrameworkContentElement for target element. BindingExpression:Path=IsActive;
DataItem=null; target element is 'DataGridTextColumn' (HashCode=40349079); target
property is 'Foreground' (type 'Brush')
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能工作?
我想创建一个全局样式,为a 内部或内部的所有控件设置VerticalAlignmentto .CenterTextBlockDataGridDataGridTextColumn
我不想将以下内容复制到每个中,DataGridTextColumn因为它感觉重复.
<DataGridTextColumn Header="Some Property" Binding="{Binding SomeProperty}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"></Setter>
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
我试过类似下面的东西,但它不起作用,因为DataGridTextColumn不继承FrameworkElement或FrameworkContentElement.DataGrid本身但我尝试进一步包装会导致错误:
<Style TargetType="DataGridTextColumn">
<Setter Property="ElementStyle">
<Setter.Value>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud) 如何设置DataGridTextColumn的MaxLength属性?
我尝试了几种方法来分解WPF DataGrid中的单元格格式(.NET 4提供的格式):
我将描述我的尝试,因为它可能会帮助其他人,我希望有人可以给我建议,以改善这些解决方案.请注意,我对WPF相当新...
预期的行为是将单元格字符串格式化为特定类似"1,234,567"的内容以进行显示,但在编辑单元格时应将其格式化为"1234567"(其默认格式).当我尝试使用数据转换器时,我没有找到在编辑时使用默认格式的方法,因此我将精力集中在样式和模板上.
使用样式,DataGridTextColumn的定义如下:
<DataGridTextColumn Header="Price (Style)" SortMemberPath="BILL_PRICE">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Text" Value="{Binding Path=BILL_PRICE, StringFormat={}{0:N0}}"/>
</Style>
</DataGridTextColumn.ElementStyle>
<DataGridTextColumn.EditingElementStyle>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Text" Value="{Binding Path=BILL_PRICE}"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="BorderThickness" Value="0"/>
</Style>
</DataGridTextColumn.EditingElementStyle>
</DataGridTextColumn>
Run Code Online (Sandbox Code Playgroud)
行为正是预期的.但是,由于绑定,我无法分解这种风格并多次使用它.为了解决分解问题,我使用了DataGridTemplateColumn和数据模板.这是我的DataGridTemplateColumn定义:
<DataGridTemplateColumn Header="Price (Template)" SortMemberPath="BILL_PRICE">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding BILL_PRICE}" Template="{StaticResource CurrencyCellControlTemplate}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentControl Content="{Binding BILL_PRICE, Mode=TwoWay}" Template="{StaticResource CurrencyCellEditingControlTemplate}"/>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
和ControlTemplate定义:
<ControlTemplate x:Key="CurrencyCellControlTemplate" TargetType="ContentControl">
<TextBlock Margin="2,0,2,0" Padding="0" TextAlignment="Right">
<TextBlock.Text>
<Binding RelativeSource="{RelativeSource TemplatedParent}" Path="Content" StringFormat="{}{0:N0}"/> …Run Code Online (Sandbox Code Playgroud) wpf datagrid string-formatting datagridtemplatecolumn datagridtextcolumn
我不明白问题是什么.绑定在Decimal属性上.这是XAML:
<DataGridTextColumn Header="Price" Binding="{Binding Price, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged} Width="*"/>
Run Code Online (Sandbox Code Playgroud)
我字面上不能输入'.' 字符.为什么它会阻止我输入那个字符,我怎么告诉它让我这样做.
我试着像这样做一个字符串格式:
<DataGridTextColumn Header="Price" Binding="{Binding Price, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0:n2}} Width="*"/>
Run Code Online (Sandbox Code Playgroud)
但这并没有解决我的问题,因为它所做的就是将".00"附加到我输入的任何内容的末尾.
我只需要输入句号即可.
更新:
我被引导到这里.我删除了UpdateSourceTrigger属性,这使我可以输入'.'.我没有安装4.5 Beta,我的本地化设置是正确的.所以现在我的问题是如何让DataGridTextColumn允许我输入'.' 是否设置了UpdateSourceTrigger属性?
我很难在此数据网格视图中显示任何数据.我已经在其他一些StackOverflow论坛帖子中提到了一些建议,但是没有任何运气可以让内容显示出来.
<DataGrid
x:Name="DataGridEmployees"
DataContext="{Binding RelativeSource={RelativeSource AncestorType=Window}}"
ItemsSource="{Binding GridView}"
AutoGenerateColumns="True"
Loaded="dataGrid1_Loaded"
Margin="0,2,0,-2" Grid.ColumnSpan="2">
<DataGrid.Columns>
<DataGridTextColumn Header="EmployeeId" Width="175" Binding="{Binding Id}"></DataGridTextColumn>
<DataGridTextColumn Header="Title" Width="175" Binding="{Binding Title}"></DataGridTextColumn>
<DataGridTextColumn Header="WorkStatus" Width="175" Binding="{Binding WorkStatus}"></DataGridTextColumn>
<DataGridTextColumn Header="FullName" Width="175" Binding="{Binding FullName}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
这是在xaml.cs文件中从单独窗口(?可能导致任何问题?)触发的click事件
public partial class MainMenu : Window
{
WpfSampleEntities2 _context = new WpfSampleEntities2();
public MainMenu()
{
InitializeComponent();
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
EmployeeDetails ed = new EmployeeDetails();
ed.DataContext = ed.DomainEmployees;
Binding bin = new Binding("GridView");
bin.Source = ed.DomainEmployees;
foreach (var item in …Run Code Online (Sandbox Code Playgroud) 我有一个WPF DataGrid用于数据输入,但有些DataGridTextColumn只是信息,我设置了IsReadOnly="True"他们的单元格不进入编辑模式.但是,他们仍然可以获得我想要避免的焦点.
有没有办法做到这一点?
我正在尝试创建一个自定义DataGrid,我可以根据单元格值格式化单个单元格(即;负值为红色文字,后置为绿色)ala这种方法...
如何在WPFToolkit DataGrid中获取当前单元格的绑定值
我还需要将值从负值转换为括号(即:-2.34到(2.34)).我有继承/过度工作.我的问题是,如何访问重写的GenerateElement方法中的单元格中的值.
菲利,提前谢谢
我以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) wpf ×10
datagrid ×6
c# ×3
wpfdatagrid ×3
xaml ×3
datagridcell ×1
focus ×1
maxlength ×1
styles ×1
tooltip ×1
wpftoolkit ×1