Как мне разрешить моим пользовательским элементам управления использовать те же стили, что и в App.xaml? - PullRequest
1 голос
/ 27 августа 2009

У меня есть UserControl с элементом Border, который я хочу стилизовать под определенный стиль Border. Он компилируется, но не запускается, вызывая XamlParseException, говоря: «Не удается найти ресурс ...»

Есть ли способ сделать это?

Спасибо.

App.xaml:

<cal:CaliburnApplication x:Class="WahnamProgressTracker.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org"
xmlns:Converters="clr-namespace:WahnamProgressTracker.Converters;assembly=WahnamProgressTracker"
xmlns:Model="clr-namespace:WahnamProgressTracker.Model">
<Application.Resources>
    <Style x:Key="FancyBorder"
           TargetType="{x:Type Border}">
        <Setter Property="Margin" Value="0,0,0,8"/>
        <Setter Property="Padding" Value="8"/>
        ...
    </Style>
</Application.Resources>

MainView.xaml:

<Window x:Class="WahnamProgressTracker.Views.MainView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:cal="http://www.caliburnproject.org"
xmlns:uc="clr-namespace:WahnamProgressTracker.UserControls"
MinHeight="500" MinWidth="800">

<DockPanel>
    <uc:MainViewMenu x:Name="menu"
                     DockPanel.Dock="Top" />

    <StatusBar x:Name="quoteBar"                   
               DockPanel.Dock="Bottom">
        <TextBlock Text="{Binding Path=Quote.Text, Mode=OneWay}" />
    </StatusBar>

    <uc:MainViewNavigation x:Name="navigationBar"
                           DockPanel.Dock="Left" />

    <uc:ProgressGraph x:Name="graph" />
</DockPanel>

MainViewNavigation.xaml (пользовательский элемент управления):

<UserControl x:Class="WahnamProgressTracker.UserControls.MainViewNavigation"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Border Style="{StaticResource FancyBorder}">
        ...       
    </Border>    
</UserControl>

1 Ответ

2 голосов
/ 27 августа 2009

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

XAML ниже работает для меня:

App.xaml:

<Application x:Class="WpfApplication1.App"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 StartupUri="Window1.xaml">
    <Application.Resources>
        <Style TargetType="{x:Type TextBlock}" x:Key="myStyle">
            <Setter Property="Foreground" Value="Green" />
            <Setter Property="FontWeight" Value="Bold" />
        </Style>
    </Application.Resources>
</Application>

Window1.xaml:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:local="clr-namespace:WpfApplication1"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <local:UserControl1 />
    </Grid>
</Window>

UserControl1.xaml:

<UserControl x:Class="WpfApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300">
    <Grid>
        <TextBlock Style="{StaticResource myStyle}">HEY!</TextBlock>
    </Grid>
</UserControl>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...