我有一个带有一个DataGridTemplateColumn的WPF Toolkit DataGrid.我在网格属性中指定了我希望所有列都可以排序,但DataGridTemplateColumn不允许它.所有其他列都允许排序.我甚至尝试过明确地将CanUserSort设置为true,但没有运气.甚至可以对模板列进行排序吗?我提供了一个适用于所有列的自定义排序器,但标题不允许排序点击.
<Controls:DataGrid ItemsSource="{Binding Events}" AutoGenerateColumns="False"
CanUserSortColumns="True"
CanUserReorderColumns="False"
Sorting="DataGrid_Sorting"
x:Name="EventsGrid">
<Controls:DataGrid.Columns>
<Controls:DataGridTemplateColumn Header="Type" Width="42" CanUserResize="False">
<Controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding EventTypeImage, Mode=OneWay}" HorizontalAlignment="Center" Width="16"/>
</DataTemplate>
</Controls:DataGridTemplateColumn.CellTemplate>
</Controls:DataGridTemplateColumn>
<Controls:DataGridTextColumn Header="Source"
Binding="{Binding Source, Mode=OneWay}" />
<Controls:DataGridTextColumn Header="Details" MinWidth="175"
Binding="{Binding Details, Mode=OneWay}" />
<Controls:DataGridTextColumn Header="Timestamp" MinWidth="175"
Binding="{Binding Timestamp, Mode=OneWay}"
IsReadOnly="True"/>
</Controls:DataGrid.Columns>
</Controls:DataGrid>
Run Code Online (Sandbox Code Playgroud) 我想格式化我的字符串绑定,因为Amount is Xwhere X是绑定到标签的属性.
我见过很多例子,但以下内容不起作用:
<Label Content="{Binding Path=MaxLevelofInvestment,
StringFormat='Amount is {0}'}" />
Run Code Online (Sandbox Code Playgroud)
我也试过这些组合:
StringFormat=Amount is {0}
StringFormat='Amount is {}{0}'
StringFormat='Amount is \{0\}'
Run Code Online (Sandbox Code Playgroud)
我甚至尝试将绑定属性的数据类型更改为int,string和double.似乎没什么用.这是一个非常常见的用例,但似乎不受支持.
.Net 3.5
我知道列不继承datacontext并通过阅读其他帖子我认为这将工作:
Visibility="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(FrameworkElement.DataContext).IsColumnNameVisible,
Converter={StaticResource boolToVisConverter}}"
Run Code Online (Sandbox Code Playgroud)
但是当然它没有..输出窗口没有抱怨,似乎我找到的资源但是viewmodel属性是更新的调用.
这是整个DG:
<tk:DataGrid
VirtualizingStackPanel.IsVirtualizing="False"
Grid.Column="0"
AlternationCount="2"
AreRowDetailsFrozen="True"
AutoGenerateColumns="False"
Background="Transparent"
BorderThickness="0"
CanUserAddRows="False"
CanUserReorderColumns="True"
CanUserResizeRows="False"
GridLinesVisibility="None"
ItemsSource="{Binding Employees}"
SelectionMode="Single"
ColumnHeaderStyle="{StaticResource columnHeaderStyle}"
RowHeaderStyle="{StaticResource rowHeaderStyle}"
CellStyle="{StaticResource cellStyle}"
RowStyle="{StaticResource rowStyle}"
ContextMenu="{StaticResource columnHeaderContextMenu}">
<tk:DataGrid.Resources>
<ContextMenu x:Key="columnHeaderContextMenu" ItemsSource="{Binding ColumnHeaderContextMenuItems}" />
<Style TargetType="{x:Type ScrollBar}">
<Setter Property="Background" Value="Transparent"/>
</Style>
<Style TargetType="{x:Type tk:DataGridColumnHeader}">
<Setter Property="Background" Value="Transparent"/>
</Style>
</tk:DataGrid.Resources>
<tk:DataGrid.Triggers>
<EventTrigger RoutedEvent="tk:DataGridRow.MouseDoubleClick">
<EventTrigger.Actions>
<BeginStoryboard Storyboard="{StaticResource showDetailGrid}"/>
</EventTrigger.Actions>
</EventTrigger>
</tk:DataGrid.Triggers>
<tk:DataGrid.Columns>
<tk:DataGridTextColumn IsReadOnly="True" Header="test" Binding="{Binding Name, Mode=OneWay}" Visibility="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(FrameworkElement.DataContext).IsColumnNameVisible, Converter={StaticResource boolToVisConverter}}" …Run Code Online (Sandbox Code Playgroud) 有人遇到过使用MVVM在视图模型中关闭视图的聪明方法吗?
也许有一种方法可以使用绑定来通知视图(窗口)关闭?
我真的很感激任何人的任何输入.
基本上我有一个绑定到loginViewModel的loginView,在viewmodel中(使用命令绑定)我测试登录是否成功,如果是,我基本上加载一个新的View(主视图)并附加其datacontext. ..
但我仍然显示loginView - 所以我需要发信号卸载..
我也希望有一个通用的解决方案,因为我确信在其他情况下我需要做这种事情
有任何想法吗?
我需要在WPF Toolkit DatePicker中更改DatePickerTextBox的字符串格式,以便为分隔符使用连字符而不是斜杠.
有没有办法覆盖此默认文化或显示字符串格式?
01-01-2010
Run Code Online (Sandbox Code Playgroud) 是否有任何方法可以使WPF应用看起来像在Windows 7上运行,即使它在XP上运行?我正在寻找一些我可以粘贴的主题.我知道Codeplex上的主题项目(http://www.codeplex.com/wpfthemes),但它缺乏支持DataGrid,这是我批判性的需要.我想也许Windows 7主题可能只是一个简单的端口,或者已存在于某个文件中.您所拥有的任何信息(即使是坏消息)都将非常感激.
更新
使用@Lars Truijens的想法,我能够获得主要控件的Windows 7外观,但遗憾的是它不能用于DataGrid我需要的WPF Toolkit 控件.
DataGrid Aero主题看起来像这样

DataGrid 应该是这样的

所以,如果有人有任何想法,我仍然在寻找这个问题的解决方案.也许有人为Aero主题构建了一个扩展,涵盖了WPF工具包控件?同样,非常感谢您提供的任何信息.
更新2 - 问题解决了!
要使Aero主题与WPF Toolkit控件一起使用,您只需添加第二个Aero字典,因此您的App.xaml现在应该如下所示.
<Application.Resources>
...
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary
Source="/PresentationFramework.Aero;component/themes/Aero.NormalColor.xaml" />
<ResourceDictionary
Source="pack://application:,,,/WPFToolkit;component/Themes/Aero.NormalColor.xaml" />
...
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
Run Code Online (Sandbox Code Playgroud)
另外,我建议你在DataGrid控件中关闭网格线(因为它们看起来很糟糕):
<DataGrid GridLinesVisibility="None" ...>
Run Code Online (Sandbox Code Playgroud) 我在这里坚持这个:
ObservableCollection<Employee> list = new ObservableCollection<Employee>();
dgEmployees.ItemsSource = list;
Run Code Online (Sandbox Code Playgroud)
当您调试列表变量时,它是空的(list.Count = 0),但是然后我将它绑定到DataGrid(WPFToolkit),它向我显示一个空行.
在即时窗口中,对于dgEmployees.Items,它显示:
dgEmployees.Items[0]
{NewItemPlaceholder}
Run Code Online (Sandbox Code Playgroud)
和
dgEmployees.Items[0].GetType()
{Name = "NamedObject" FullName = "MS.Internal.NamedObject"}
[System.RuntimeType]: {Name = "NamedObject" FullName = "MS.Internal.NamedObject"}
Run Code Online (Sandbox Code Playgroud)
这似乎发生在我将这个Datagrid放入TabControl后,但我不确定它与它有什么关系.
有谁知道如何删除这个空白行?
我想在我的DataGrid的所有列标题上启用文本换行,而不禁用其他默认标题功能,例如列调整大小,排序方向指示符等.
有没有办法做到这一点?
我正在使用作为WPF工具包一部分的WPF日历.
我在控件上有两个不同的日历.当我尝试从一个日历然后从第二个日历中选择日期时,我必须两次点击第二个日历以使其选择日期.
有没有其他人有这个问题并知道解决方案?
wpftoolkit ×10
wpf ×9
.net ×3
c# ×2
datagrid ×2
xaml ×2
.net-3.5 ×1
binding ×1
calendar ×1
datepicker ×1
mvvm ×1
sorting ×1
themes ×1
windows ×1
word-wrap ×1
wpf-controls ×1
wpfdatagrid ×1