[WPF] HeaderedContentControl, стили и неработающий дизайнер
От: Аноним  
Дата: 17.03.11 17:44
Оценка:
Есть простейший юзерконтрол. На нем я размещаю другой простейший контрол:

<HeaderedContentControl Grid.Column="0" Header="Содержание" Content="{Binding Content}" Style="{StaticResource Styles.Document.HeaderedContent}" />


Где объектом для биндинга в дизайнере выступает такая штука:
<UserControl x:Class="Namespace.DocumentView"
             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" 
             xmlns:s="clr-namespace:Namespace"
             mc:Ignorable="d" 
             d:DesignHeight="400" d:DesignWidth="700" d:DataContext="{x:Static s:DummyDocumentInfoSource.Source}" >


Соответсвтенно, Source выдает мне инстанс класса DummyDocumentInfo, к которому можно биндиться и видеть все в дизайнере VS2010 наживую.

Есть стиль к нему

    <Style x:Key="Styles.Document.HeaderedContent" TargetType="{x:Type HeaderedContentControl}">
        <Setter Property="HeaderTemplate">
            <Setter.Value>
                <DataTemplate>
                     <TextBlock Margin="7,0,0,2" FontSize="16" FontWeight="SemiBold" Text="{Binding}" />
                </DataTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="ContentTemplate">
            <Setter.Value>
                <DataTemplate>
                    <TextBox Text="{Binding}" Style="{StaticResource Styles.Document.ContentTextBox}" />
                </DataTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type HeaderedContentControl}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="*" />
                        </Grid.RowDefinitions>
                        <ContentPresenter Grid.Row="0" ContentSource="Header" />
                        <ContentPresenter Grid.Row="1" ContentSource="Content" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


Если в этом стиле в ContentTemplate в TextBox.Text вместо {Binding} передать текст — дизайнер работает. Как только туда ставишь {Binding} — моментально отваливается дизайнер с ошибкой:

System.Windows.Markup.XamlParseException
Two-way binding requires Path or XPath.


И жутким стектрейсом.

Шаблон для HeaderedContentControl писал по MSDN, собственно, он примерно такой же там и есть.

Где проблема? Куда смотреть?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.