Custom ContentControl в WPF

Я думаю, что прошу здесь прочитать лекцию о правильном применении 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>

Но, конечно, это не работает. Я почти уверен, что смогу сделать то же самое, играя трюки с перегрузками за кулисами, но было бы неплохо, если бы я мог сделать что-то вроде этого. Неужели я должен выложить все свои ужасные, процедурные способы позади меня и использовать эти стили, о которых вы говорите? Если да, то может ли кто-нибудь хотя бы сказать мне, как эта кнопка выглядит внизу во фреймворке?

8
задан Jeff 27 December 2010 в 04:04
поделиться