用工具箱包装数据网格

发布于 2024-12-05 22:52:16 字数 106 浏览 4 评论 0原文

我有一个 wpf 应用程序。

我希望应用程序中的所有数据网格上方都有一组按钮。

尝试使用装饰器和装饰器但没有成功(数据网格停止显示行)

有什么建议吗?

I got a wpf application.

I want all my data grids in application to have a set of buttons above them.

Tried to use decorator and adorner without success(the dataGrid stopped showing rows)

Any suggestions?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

子栖 2024-12-12 22:52:16

考虑到您希望在工具箱按钮后面具有功能(我认为需要引用网格),为此从 HeaderedContentControl 继承可能是有意义的。这确实意味着您可以将任何内容放入控件中,但可以覆盖元数据以为此添加验证。

在任何地方,这里都是 xaml:

<!-- ToolBoxGridControl.xaml -->
<HeaderedContentControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
x:Class="WpfApplication3.ToolBoxGridControl">   
<HeaderedContentControl.Header>
    <StackPanel Orientation="Horizontal">
        <Button/>
        <Button/>
        <Button/>
    </StackPanel>
</HeaderedContentControl.Header>
<HeaderedContentControl.Template>
    <ControlTemplate TargetType="HeaderedContentControl">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <ContentControl Grid.Row="0" Content="{TemplateBinding Header}"/>
            <ContentControl Grid.Row="1" Content="{TemplateBinding Content}"/>
        </Grid>
    </ControlTemplate>
</HeaderedContentControl.Template>
</HeaderedContentControl>

和简单的代码隐藏(您可以在其中放置工具箱实现)。

public partial class ToolBoxGridControl : HeaderedContentControl
{       
    private DataGrid DataGrid { get { return (DataGrid)Content; } }

    public ToolBoxGridControl()
    {
        this.InitializeComponent();
    }
}

要实际使用,您只需将以下内容添加到带有数据网格的 XAML 中

<local:ToolBoxGridControl>
    <DataGrid/> 
</local:ToolBoxGridControl>

Given that you're wanting to have functionality behind the toolbox buttons (which I assume will require a reference to the grid) it probably makes sense to inherit from a HeaderedContentControl for this. This does mean that you can put any content in the control, but it would be possible to put override the metadata to add validation for this.

Anywhere, here's the xaml:

<!-- ToolBoxGridControl.xaml -->
<HeaderedContentControl
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"  
x:Class="WpfApplication3.ToolBoxGridControl">   
<HeaderedContentControl.Header>
    <StackPanel Orientation="Horizontal">
        <Button/>
        <Button/>
        <Button/>
    </StackPanel>
</HeaderedContentControl.Header>
<HeaderedContentControl.Template>
    <ControlTemplate TargetType="HeaderedContentControl">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <ContentControl Grid.Row="0" Content="{TemplateBinding Header}"/>
            <ContentControl Grid.Row="1" Content="{TemplateBinding Content}"/>
        </Grid>
    </ControlTemplate>
</HeaderedContentControl.Template>
</HeaderedContentControl>

And the simple code-behind (where you can put your toolbox implementation).

public partial class ToolBoxGridControl : HeaderedContentControl
{       
    private DataGrid DataGrid { get { return (DataGrid)Content; } }

    public ToolBoxGridControl()
    {
        this.InitializeComponent();
    }
}

To actually use, you can just add the following to your XAML with your data grid

<local:ToolBoxGridControl>
    <DataGrid/> 
</local:ToolBoxGridControl>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文