WPF中的自定义ContentControl

时间:2010-12-27 04:04:51

标签: 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>

但当然,这不起作用。我相当肯定我可以通过在幕后玩过载的技巧来解决同样的问题,但如果我可以做这样的事情会很好。我真的必须把所有可怕的,程序性的方法放在我身后并使用你所说的这些风格吗?如果是这样,有人至少可以告诉我该按钮在框架中看起来像什么?

2 个答案:

答案 0 :(得分:4)

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

Pete的ContentPresenter正在做与你的例子中相同的事情。

答案 1 :(得分:1)

使用样式允许您使用控件的表示来分隔控件的功能;例如Button

在开始时将其视为一种控制,就像功能一样。一个包含预定义事件,属性等的简单类......一旦该控件成为可视树的一部分,它现在需要一个视觉标识。以前不需要一个;但是现在确实如此。定义默认样式允许该控件现在具有可视化表示,因为它不在视觉树中,所以它之前不需要。

忽略样式就像在使用HTML时忽略CSS一样。