小编And*_*y T的帖子

WPF - DataGrid列,宽度="*",但MinWidth适合内容

使一组DataGrid列具有比例宽度的最佳/正确方法是什么(Width="\*"),但是它们的最小宽度至少是其内容的宽度?目前,如果我使用Width="*",那么列保持完全成比例,但内容如果列太薄,会被裁剪.如果我使用Width="Auto",那么列的大小完全符合它们的内容,但这使它们具有不同的大小.

我想要的实际上是两者的组合,例如Width="\*",MinWidth="Auto"当有额外的宽度时,列将全部空出到相等的宽度,但是当网格变小时,内容永远不会被裁剪.

可悲的是,MinWidth="Auto"不存在,所以我想我需要绑定列的MinWidth属性,但很难弄清楚我将它绑定到什么.

如何告诉WPF "MinWidth="列的最宽内容的宽度?

wpf xaml datagrid width datagridcolumn

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

如何将一个资源(SolidColorBrush)指向另一个资源

我在ResourceDictionary中设置了一个SolidColorBrush和LinearGradientBrush资源.我使用这些,因为我重新设计了几个控件,用于我们的应用程序.

现在我有一堆其他外部画笔,我必须使用它们来改变我们的应用程序.这些也在ReseourceDictionary中设置.

是否可以将我的画笔资源指向另一个字典中的新资源,类似于样式的"BasedOn"属性?

这样的事情,概念上至少:

<SolidColorBrush x:Key="MyDataGridHeaderBrush" Binding="HeaderBrushDefinedElsewhere"/>
Run Code Online (Sandbox Code Playgroud)

...或者这种事情是不可能的,在这种情况下我只需要进行查找/替换并用新的刷子名称替换所有刷子名称?

提前致谢,

wpf resources styles resourcedictionary

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

WPF - 如何绑定DataGridTemplateColumn

我试图获取与特定关联的属性的名称DataGridColumn,以便我可以基于此做一些事情.当用户单击列标题上的上下文菜单项时,将调用此函数...

对于开箱即用的现成滚动列类型来说这很好DataGridTextColumn,因为它们是绑定的,但问题是我的一些列DataGridTemplateColumns是未绑定的.

private void GroupByField_Click (object sender, RoutedEventArgs e){
        MenuItem mi = (MenuItem)sender;
        ContextMenu cm = (ContextMenu) mi.Parent;
        DataGridColumnHeader dgch = (DataGridColumnHeader) cm.PlacementTarget;  
        DataGridBoundColumn dgbc = (DataGridBoundColumn) dgch.Column;
        Binding binding = (Binding) dgbc.Binding;
        string BoundPropName = binding.Path.Path;

        //Do stuff based on bound property name here...
    }
Run Code Online (Sandbox Code Playgroud)

所以,以我的Name专栏为例......它是一个DataGridTemplateColumn(因为它有一个图像和其他一些东西).因此,它实际上并没有绑定到'Name'属性...但我希望如此,以便上面的代码可以工作.

我的问题是两部分的,真的:

  1. 是否有可能成为一个DataGridTemplateColumnBOUND,以便上述代码可以工作?我能以某种方式将它绑定到一个属性吗?

  2. 或者我需要完全不同的东西,并更改上面的代码?

提前致谢!

c# wpf binding datagrid datagridtemplatecolumn

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

WPF - 非常基本的ListBox.ItemTemplate问题

好吧,这是一个令人尴尬的简单问题,但让我发疯.我正在学习DataTemplating,并且我正在尝试将非常简单的ItemTemplate应用于ListBox.

但是,当我运行我的应用程序时,模板完全被忽略,我只是得到标准的列表框,而实际上我希望看​​到一个带有'Test'的复选框列表.

我已经尝试过几次并且总是一样的结果.我在Google上查了几个资源,并且在ListBox上都有相同的语法定义和ItemTemplate,所以我真的看不出我出错的地方.

码...

<Grid x:Name="LayoutRoot">
    <ListBox x:Name="TestList"
        SelectionMode="Multiple">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <CheckBox Content="Check this checkbox!"/>
                    <TextBlock>Test</TextBlock>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
        <ListBox.Items>
            <ListBoxItem>Bob</ListBoxItem>
            <ListBoxItem>Jim</ListBoxItem>
            <ListBoxItem>Dave</ListBoxItem>
            <ListBoxItem>Larry</ListBoxItem>
            <ListBoxItem>Tom</ListBoxItem>
        </ListBox.Items>            
    </ListBox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.抱歉这样一个看似愚蠢的问题,但我真的堕落在这里的第一个障碍:(

wpf listbox datatemplate itemtemplate

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

WPF - 从组头样式中绑定到当前项

我是一个WPF菜鸟,所以请放轻松我;-)

我正在尝试创建一个分组的DataGrid(WPF工具包版本).我已经成功创建了数据源,DataGrid本身,所需的CollectionViewSource和组头的样式(使用扩展器).

我想通过名为"Assign_To"的属性进行分组,并在标题中显示相关值(分组项共享的值).但是,我无法弄清楚如何绑定到当前组/项以返回其Assign_To属性.

我得到的最接近的(如下所示)绑定到整个CollectionViewSource,它返回Assign_To的固定值.绑定到当前项/组以便为"Assign_To"返回正确值的正确方法是什么?

希望有人能提供帮助.谢谢!

安迪T.

这是源头......

<Window DataContext="{Binding Source={StaticResource SampleDataSource}}"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:dg="http://schemas.microsoft.com/wpf/2008/toolkit"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Class="DataGridTest.MainWindow"
    x:Name="Window"
    Title="MainWindow"
    Width="640" Height="480" mc:Ignorable="d">

    <Window.Resources>
        <CollectionViewSource x:Key="CVS" Source="{Binding MyData}">
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="Assign_To"/>
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>

        <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type GroupItem}">
                        <Expander IsExpanded="True">
                            <Expander.Header>
                                <StackPanel Orientation="Horizontal">
                                    <TextBlock Text="Assign To: "/>
                                    <TextBlock Text="{Binding Source={StaticResource CVS}, Path=Assign_To}"/>
                                </StackPanel>                               
                            </Expander.Header>
                            <ItemsPresenter/>
                        </Expander>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    </Window.Resources>


    <Grid x:Name="LayoutRoot">
        <dg:DataGrid
         ItemsSource="{Binding Source={StaticResource CVS}}"
         SelectionUnit="CellOrRowHeader" 
         CanUserAddRows="False" 
         CanUserDeleteRows="False" 
         CanUserResizeRows="False">
         <dg:DataGrid.GroupStyle>
            <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                <GroupStyle.Panel> …
Run Code Online (Sandbox Code Playgroud)

wpf xaml binding grouping datagrid

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

如何从XAML正确引用类

好的,这是一个超级超级菜鸟问题,我几乎不好意思问...

我想在我的XAML文件中引用一个类.它是一个DataTemplateSelector,用于为DataGrid列选择正确的编辑模板.

无论如何,我已经将类编写到我的代码后面,将本地命名空间添加到XAML顶部的顶部,但是当我尝试从XAML引用该类时,它告诉我该类在本地命名空间中不存在.我必须遗漏一些非常简单但我无法理解的东西......

这是我的代码.

XAML:

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tk="http://schemas.microsoft.com/wpf/2008/toolkit"
xmlns:local="clr-namespace:CustomFields"
xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
x:Class="CustomFields.MainWindow"
x:Name="Window"
Title="Define Custom Fields"
Width="425" Height="400" MinWidth="425" MinHeight="400">

<Window.Resources>
    <ResourceDictionary>
        <local:RangeValuesEditTemplateSelector>
            blah blah blah...
        </local:RangeValuesEditTemplateSelector>
    </ResourceDictionary>
</Window.Resources>
Run Code Online (Sandbox Code Playgroud)

C#:

namespace CustomFields
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            this.InitializeComponent();

            // Insert code required on object creation below this point.
        }
    }

    public class RangeValuesEditTemplateSelector : DataTemplateSelector
    {
        public RangeValuesEditTemplateSelector(){

            MessageBox.Show("hello");
        }
    }   
}
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?我认为这应该很简单,如1-2-3 ......

谢谢!

c# wpf xaml class datatemplateselector

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

WPF - DataGrid列标题对齐

我正在使用WPFToolkit DataGrid控件,我想重新设置一些列标题,以便标题文本垂直显示而不是水平显示(列中的数据都是数字,因此,不是很宽,但标题文本是长).所以我创建了一个DataTemplate并尝试将DataGridColumn.HeaderTemplate添加到它.这是我的模板:

<DataTemplate x:Key="headerTemplate"> 
        <StackPanel VerticalAlignment="Bottom" HorizontalAlignment="Left" Background="Aqua"> 
            <StackPanel.LayoutTransform> 
                <RotateTransform Angle="-90"/> 
            </StackPanel.LayoutTransform> 
            <TextBlock Text="{Binding}" VerticalAlignment="Bottom" HorizontalAlignment="Left" Background="Pink"> 
            </TextBlock> 
        </StackPanel> 
    </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

这很好用,除了标题的对齐总是左和中.StackPanel或TextBlock的对齐组合似乎没有任何区别.我希望文本在底部和中间对齐.我该怎么做呢?

谢谢,

wpf layout xaml datagrid wpfdatagrid

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

WPF - ListBox在绑定ItemsSource时忽略样式

我在WPF中创建了一个ListBox样式,以便它呈现为一个复选框列表.

当我手动填充ListBox的项目时,样式工作完美.但是,当我将ListBox的ItemsSource绑定到静态资源(包含所需项目的ItemsControl)时,样式将被完全删除.

这是风格:

<Style x:Key="CheckBoxListStyle" TargetType="ListBox">
    <Style.Resources>
        <Style TargetType="ListBoxItem">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="ListBoxItem">
                        <Grid Margin="2">
                            <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto" />
                                    <ColumnDefinition />
                            </Grid.ColumnDefinitions>
                            <CheckBox IsChecked="{Binding IsSelected, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}"/>
                            <ContentPresenter
                                Grid.Column="1"
                                Margin="2,0,0,0" />
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Style.Resources>
    <Setter Property="ItemsPanel">
        <Setter.Value>
            <ItemsPanelTemplate>
                <WrapPanel Orientation="Vertical"  />
            </ItemsPanelTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Background" Value="Transparent" />
</Style>
Run Code Online (Sandbox Code Playgroud)

这是ListBox的代码,它正确显示了样式:

<ListBox x:Name="ColumnsList"
            Grid.Column="0"
            Grid.Row="0"
            Style="{StaticResource CheckBoxListStyle}"
            BorderThickness="1">                                                
            <ListBox.Items>
                <ListBoxItem>Test</ListBoxItem>
                <ListBoxItem>Test2</ListBoxItem>
                <ListBoxItem>Test3</ListBoxItem>
            </ListBox.Items>
        </ListBox>
Run Code Online (Sandbox Code Playgroud)

这是ListBox忽略样式的代码:

<ListBox x:Name="ColumnsList2"
            Grid.Column="0"
            Grid.Row="0"
            Style="{StaticResource CheckBoxListStyle}"
            BorderThickness="1" …
Run Code Online (Sandbox Code Playgroud)

wpf xaml styling listboxitem staticresource

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