c# - WPF 中的自定义内容控件

标签 c# .net wpf wpf-controls

我想我在这里请求有关正确应用 WPF 的讲座,但我会捕获机会,因为我已经无计可施了。我认为这可能主要是由于我在完全接受 WPF 模板和样式方面懒惰的结果,所以我很乐意听任何此类讲座。

我正在编写一种音频编辑器/事件编排器。我有一个我相当满意的轨道编辑器。但是,我主要使用自定义控件来构建它(我知道,这可能是 WPF 的罪过)。为了与该主题保持一致,我想为轨道制作一个标准标题,但我希望各个轨道“类型”能够定义该标题中的内容。我认为在边缘定义一种“抓地力”然后允许实现者“填充”物质的控件会很好地工作。但是,我不知道如何在不使用样式的情况下在 WPF 中执行此操作,即使我最终使用了样式,我也想了解这一点。

这可能归结为想要一种简单的 ContentControl 控件(例如按钮)的示例实现,但找不到一个(AvalonDock 除外,它最终使用 - 我确定正确 - 用于此的模板) .在我看来,xaml 看起来像这样:

<ContentControl x:Class="TestArea.CustomContentControl2"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="100"/>
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <TextBlock Text="Hello"/>
    <ContentPresenter Grid.Column="1"/>
</Grid>

当然,那是行不通的。我相当确定我可以通过在幕后玩弄重载技巧来完成同样的事情,但如果我能做这样的事情那就太好了。我真的必须把我所有可怕的、程序性的方式抛在脑后,并使用你所说的这些风格吗?如果是这样,至少有人可以告诉我该按钮在框架中的样子吗?

最佳答案

这是从 ContentControl 派生以完成您想要的任务的完整示例:Creating Customized UserControls (Deriving from ContentControl) in WPF 4

Pete 的 ContentPresenter 正在做与您的示例中相同的事情。

关于c# - WPF 中的自定义内容控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4536563/

相关文章:

c# - 我应该在分配新对象之前处理旧对象吗?

c# - 如何在c#中将一个参数添加到当前url

c# - 验证 .NET 时间格式的正则表达式

c# - 我们可以在 Mac OS X 上运行 C#/WPF 应用程序吗?

.net - .NET 框架的平台独立程度

c# - 如何从wpf中的datagridview更新多个基于表

c# - 如何将对象的 List<> 数据绑定(bind)到 DropDownList 并根据对象中的属性设置 SelectedItem?

c# - 如何测试方法是否在特定输入上引发异常

c# - 将字符串属性作为键添加到字典中会克隆字符串吗?有适当的解决方法吗?

.net - 如果我使用 .mdf 文件部署应用程序,用户是否需要安装 SQL 2008 Express?