2012-11-16 4 views
0

예를 들어 모달 대화 상자에 사용할 컨트롤 템플릿을 정의하려고합니다. 문제는 내가 stackoverflow 및 그 밖의 다른 곳에서 찾을 수있는 모든 지침을 따랐지만 스타일/템플릿이로드 및 적용되지 않았다는 것입니다. 대신 정적 리소스 예외가 발생합니다.Wpf의 창에 제어 템플릿을 할당하는 방법은 무엇입니까?

템플릿과 창이 서로 다른 파일에 있으면 내 창에 템플릿을 어떻게 적용합니까?

어떤 도움이 필요합니까? 내가 사용했다

<Window x:Class="WpfWindowTemplateTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" 
     Template="{StaticResource MyWindowTemplate}" 
     Style="{StaticResource MyWindowStyle}" /> 

템플릿이 하나입니다 대신 정적 리소스의

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 

    <ControlTemplate x:Key="MyWindowTemplate" TargetType="{x:Type Window}"> 
     <Border x:Name="WindowBorder" Style="{DynamicResource WindowBorderStyle}"> 
      <Grid> 
       <Border Margin="4,4,4,4" Padding="0,0,0,0" x:Name="MarginBorder"> 
        <AdornerDecorator> 
         <ContentPresenter/> 
        </AdornerDecorator> 
       </Border> 
       <ResizeGrip Visibility="Collapsed" IsTabStop="false" HorizontalAlignment="Right" x:Name="WindowResizeGrip" 
        VerticalAlignment="Bottom" /> 
      </Grid> 
     </Border> 
     <ControlTemplate.Triggers> 
      <MultiTrigger> 
       <MultiTrigger.Conditions> 
        <Condition Property="ResizeMode" Value="CanResizeWithGrip"/> 
        <Condition Property="WindowState" Value="Normal"/> 
       </MultiTrigger.Conditions> 
       <Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible"/> 
       <Setter Property="Margin" TargetName="MarginBorder" Value="4,4,4,20" /> 
      </MultiTrigger> 
      <Trigger Property="WindowState" Value="Maximized"> 
       <Setter Property="CornerRadius" TargetName="WindowBorder" Value="0,0,0,0"/> 
      </Trigger> 
     </ControlTemplate.Triggers> 
    </ControlTemplate> 
    <Style x:Key="MyWindowStyle" TargetType="{x:Type Window}"> 
     <Setter Property="AllowsTransparency" Value="False" /> 
     <Setter Property="WindowStyle" Value="SingleBorderWindow" /> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/> 
     <Setter Property="Background" Value="Transparent" /> 
     <Setter Property="ShowInTaskbar" Value="False" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Window}"> 
        <Border> 
         <AdornerDecorator> 
          <ContentPresenter/> 
         </AdornerDecorator> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style>  
</ResourceDictionary> 
+0

무엇 정확한 오류이며, 여기서이 ResourceDictionary에로드되어이 추가? –

답변

2

사용 DynamicResource.

<Window x:Class="WpfWindowTemplateTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" 
    Template="{DynamicResource MyWindowTemplate}" 
    Style="{DynamicResource MyWindowStyle}" /> 

귀하의 app.xaml

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="/WpfWindowTemplateTest;component/MyWindowTemplate.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 
+0

작동하지 않습니다. 그런 다음 창이 검은 색으로 유지됩니다. 이것이 내가 몇 시간 동안 미쳐 버린 이유입니다. – Matthias

+0

이상하게도, ControlTemplate을 메인 윈도우에 다음과 같이 설정할 수있었습니다./ – Sisyphe

+0

확실히 해봅니다. – Sisyphe

관련 문제