Ошибка: не удается найти свойство стиля «Шаблон» для типа «System.Windows.Controls.Primitives.Popup» - PullRequest
2 голосов
/ 05 декабря 2011

Я должен создать стиль для всплывающих окон.Я использую WPF и .NET Framework 4.

Я написал стиль:

<Style x:Key="PopupBox" TargetType="{x:Type Popup}">   
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Popup}">       
                <Grid>  
                    <Border BorderBrush="Blue" Background="#FFFFFFFF">
                        <Grid>                                
                            <Border Background="AliceBlue"/>  
                            <ContentPresenter ContentSource="Header" /> 
                            <ContentPresenter/>
                            <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/>
                        </Grid>
                    </Border>
                </Grid>                    
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style> 

Я вырезал из этого кода некоторые элементы, такие как определения строк и столбцов сетки, потому что они не имеют значения.

Похоже, я не могу использовать <Setter Property="Template">, потому что у всплывающего элемента управления нет этого свойства.Как я могу обойти это?

Любая помощь здесь высоко ценится!

Ответы [ 2 ]

10 голосов
/ 05 декабря 2011

Поскольку у Popup нет никакого шаблона и только свойство Child для содержимого, вы можете использовать другой элемент управления (например, ContentControl) для стиля и шаблона:

<Style x:Key="PopupContentStyle" TargetType="ContentControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Border BorderBrush="Blue" Background="#FFFFFFFF">
                    <Grid>                                
                        <Border Background="AliceBlue"/>  
                        <ContentPresenter/>
                        <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
     </Setter>
</Style>

Затем просто поместите его в каждую Popup, которая в этом нуждается:

<Popup>
    <ContentControl Style={StaticResource PopupContentStyle}>
       <!-- Some content here -->
    </ContentControl>
</Popup>
2 голосов
/ 05 декабря 2011

Шаблон может быть установлен только для элементов управления, которые наследуются от класса Control, поскольку класс Control предоставляет свойство Template.Но поскольку PopUp наследуется непосредственно от класса FrameworkElement, поэтому вы не можете установить его свойство Template.В качестве обходного пути вы можете установить его свойство Child следующим образом -

<Setter Property="Child">
        <Setter.Value>      
                <Grid>  
                    <Border BorderBrush="Blue" Background="#FFFFFFFF">
                        <Grid>                                
                            <Border Background="AliceBlue"/>  
                            <ContentPresenter ContentSource="Header" /> 
                            <ContentPresenter/>
                            <Border BorderBrush="#FFFFFFFF" Background="#FFBFDBFF"/>
                        </Grid>
                    </Border>
                </Grid> 
        </Setter.Value>
</Setter>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...