none
Janela customizada com Resource Dictionary RRS feed

  • Pergunta

  • Ola, estou criando um estilo customizado em um ResourceDictionary para as minhas janelas 'Window'. Preciso que este arquivo ResourceDictionary esteja em um assembly separado (dll) para que o mesmo possa ser referenciado e reutilizado em meus sistemas.
    Quando este arquivo Resource está dentro da minha aplicação WPF, funciona corretamene. Porém quando eu coloco o arquivo Resource dentro de um projeto separado (Class Library) para que o estilo possa ser utilizado por vários projetos, ocorre o seguinte erro na 'Window': "TargetType 'Window' não corresponde ao tipo de elemento 'WindowInstance'".

    Está correta desta forma ou existe uma outra maneira para criar um estilo e reutiliza-lo em vários projetos WPF ?

    No aguardo,
    Marcelo


    Marcelo A. Prado
    quinta-feira, 29 de abril de 2010 18:45

Respostas

Todas as Respostas

  • Marcelo,

    Tente criar o projeto como projeto WPF normal e depois mude o modo de compilação para Class Library

    quinta-feira, 29 de abril de 2010 19:49
  • Ola Thiago,

    Criei o projeto WPF normal, inseri o ResourceDictionary, alterei o modelo de compilação Class Library, mas o erro continua ocorrendo.  Erro : "TargetType 'Window' não corresponde ao tipo de elemento 'WindowInstance'".

    Interessante que o erro ocorre apenas no Blend, no Visual Studio não ocorre. E também somente em tempo de design, se eu executar a aplicação pelo Visual Studio, funciona corretamente. Estou utilizando VS 2008 e Expression Blend 3.

    Segue abaixo o conteúdo do meu Resource:

    <ResourceDictionary
    	xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    	xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    	
    	<ControlTemplate x:Key="BaseWindowTemplate2" TargetType="{x:Type Window}">
       <ControlTemplate.Resources>
       <Storyboard x:Key="StoryboardCloseWindow">
        <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="grid" Storyboard.TargetProperty="(UIElement.Opacity)">
        <SplineDoubleKeyFrame KeyTime="00:00:00" Value="1"/>
        <SplineDoubleKeyFrame KeyTime="00:00:00.3000000" Value="0"/>
        </DoubleAnimationUsingKeyFrames>
       </Storyboard>
       </ControlTemplate.Resources>
       <Grid x:Name="grid" Width="{TemplateBinding ActualWidth}" Height="{TemplateBinding ActualHeight}">
       <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="9"/>
        <RowDefinition Height="*"/>
       </Grid.RowDefinitions>
       <Grid.ColumnDefinitions>
        <ColumnDefinition Width="52"/>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="10"/>
        <ColumnDefinition Width="52"/>
        <ColumnDefinition Width="138"/>
       </Grid.ColumnDefinitions>
    
       <Border x:Name="brdLeft" ClipToBounds="True"
    							 	Grid.ColumnSpan="2"								
    								Grid.RowSpan="3"
    								CornerRadius="7"
    								Background="{TemplateBinding Background}" 
    								BorderBrush="{TemplateBinding BorderBrush}" 
    								BorderThickness="{TemplateBinding BorderThickness}" />
    
       <Border x:Name="brdRight" Margin="0,0,0,0" ClipToBounds="True"							 	
    								Grid.Column="3"
    								Grid.ColumnSpan="2"
    								Grid.RowSpan="3"
    								CornerRadius="7"
    								Width="190"
    								Background="{TemplateBinding Background}" 
    								BorderBrush="{TemplateBinding BorderBrush}" 
    								BorderThickness="{TemplateBinding BorderThickness}" HorizontalAlignment="Right" RenderTransformOrigin="0.5,0.5" >
        <Border.RenderTransform>
        <TransformGroup>
         <ScaleTransform/>
         <SkewTransform/>
         <RotateTransform/>
         <TranslateTransform/>
        </TransformGroup>
        </Border.RenderTransform>
       </Border>
    
       <Border x:Name="brdTop" ClipToBounds="True"
    								Grid.ColumnSpan="2"								
    								Grid.RowSpan="2"
    								CornerRadius="7,7,0,0"
    								Margin="1"	
    								Background="{TemplateBinding Background}" 							
    								BorderBrush="{x:Null}" 
    								BorderThickness="0" />
    
       <TextBlock FontFamily="Verdana" Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" FontSize="10" TextAlignment="Left" FontWeight="Normal" VerticalAlignment="Top" Height="10" Width="Auto" Text="▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪" Foreground="#FF9F9F9F" Margin="8,0,8,0" />
       <TextBlock x:Name="textBlock" FontFamily="Verdana" Grid.Row="1" Grid.Column="3" Grid.ColumnSpan="2" FontSize="10" TextAlignment="Left" FontWeight="Normal" VerticalAlignment="Top" Height="10" Width="Auto" Text="▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪▪" Foreground="#FF9F9F9F" Margin="8,0,8,0" RenderTransformOrigin="0.5,0.5" >
    								<TextBlock.RenderTransform>
    									<TransformGroup>
    										<ScaleTransform/>
    										<SkewTransform/>
    										<RotateTransform/>
    										<TranslateTransform/>
    									</TransformGroup>
    								</TextBlock.RenderTransform>
       </TextBlock>
    
       <Image x:Name="Icone" Grid.Column="0" Grid.Row="0" Margin="5,10,5,0" Source="{TemplateBinding Property=Icon}" Height="32" Width="32" />
       <TextBlock x:Name="Titulo" FontFamily="Tahoma" FontSize="13.333" HorizontalAlignment="Left" TextAlignment="Left" FontWeight="Bold" Grid.Column="1" Grid.Row="0" Height="14" VerticalAlignment="Center" Text="{TemplateBinding Title}" Foreground="#FF434343" Margin="0,15,0,0" />
    
       <Image x:Name="image" Margin="5,10,5,0" Grid.Column="3" Grid.Row="0" Height="32" Width="32" RenderTransformOrigin="0.5,0.5" >
        <Image.RenderTransform>
        <TransformGroup>
         <ScaleTransform/>
         <SkewTransform/>
         <RotateTransform/>
         <TranslateTransform/>
        </TransformGroup>
        </Image.RenderTransform>
       </Image>
       <TextBlock x:Name="textBlock1" FontFamily="Tahoma" FontSize="13.333" TextAlignment="Left" FontWeight="Bold" Grid.Column="4" Height="18" Width="Auto" VerticalAlignment="Center" Text="OPÇÕES" Foreground="#FF434343" Margin="0,15,0,0" RenderTransformOrigin="0.5,0.5" >
    								<TextBlock.RenderTransform>
    									<TransformGroup>
    										<ScaleTransform/>
    										<SkewTransform/>
    										<RotateTransform/>
    										<TranslateTransform/>
    									</TransformGroup>
    								</TextBlock.RenderTransform>
       </TextBlock>
    
       <ContentPresenter x:Name="contentPresenter" 
    								Grid.ColumnSpan="5"
    								Grid.RowSpan="2"
    								Margin="5" 
    								Grid.Row="2" 
    								Content="{TemplateBinding Content}" 
    								ContentTemplate="{TemplateBinding ContentTemplate}" RenderTransformOrigin="0.5,0.5" >
        <ContentPresenter.RenderTransform>
        <TransformGroup>
         <ScaleTransform/>
         <SkewTransform/>
         <RotateTransform/>
         <TranslateTransform/>
        </TransformGroup>
        </ContentPresenter.RenderTransform>
       </ContentPresenter>
    
       <ResizeGrip 
    								HorizontalAlignment="Right" 
    								x:Name="WindowResizeGrip" 
    								VerticalAlignment="Bottom" 
    								IsTabStop="False" 
    								Visibility="Collapsed" 
    								Grid.Column="2" 
    								Grid.Row="1" />
    
       </Grid>
       <ControlTemplate.Triggers>
       <MultiTrigger>
        <MultiTrigger.Conditions>
        <Condition Property="ResizeMode" Value="CanResizeWithGrip"/>
        <Condition Property="WindowState" Value="Normal"/>
        </MultiTrigger.Conditions>
        <Setter Property="Visibility" TargetName="WindowResizeGrip" Value="Visible"/>
       </MultiTrigger>
       </ControlTemplate.Triggers>
      </ControlTemplate>
      
     <Style x:Key="StyleWindowSiscorp2" TargetType="{x:Type Window}">
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}"/>
     <Setter Property="Background" Value="#FFF0F0F0"/>
     <Setter Property="WindowStyle" Value="None"/>
     <Setter Property="ResizeMode" Value="NoResize"/>
     <Setter Property="FontFamily" Value="Verdana"/>
     <Setter Property="FontSize" Value="10.4"/>
     <Setter Property="AllowsTransparency" Value="True"/>
     <Setter Property="BorderBrush" Value="#FF787878"/>
     <Setter Property="BorderThickness" Value="1.5"/>
     <Setter Property="Template" Value="{StaticResource BaseWindowTemplate2}"/>
     </Style>
    	
    	
    </ResourceDictionary>

    Marcelo

     


    Marcelo A. Prado
    quinta-feira, 29 de abril de 2010 20:35
  • Marcelo,

    Alguma novidade quanto a essa sua dúvida?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    sexta-feira, 7 de maio de 2010 22:57
    Moderador
  • Ola Andre,

    Ainda nenhuma novidade. O problema persiste.

    Marcelo.


    Marcelo A. Prado
    terça-feira, 25 de maio de 2010 18:46
  • Olha externamente acho q vc so vai conseguir alterando o Style do Windows da sua aplicação, entenda que o resouce dictonary vai trabalhar com as windows que estao no mesmo assembly, agora se vc criar uma nova Key para o resouce e definir a mesma no Style do windows de outro assemby devera funcionar...


    What would Brian Boitano do ?
    ((2B || !2B) is Question) ?
    terça-feira, 25 de maio de 2010 19:34
    Moderador
  • Ola Rui,

    Estou fazendo exatamente isso que vc disse. Estou utilizando uma key no resource e definindo a mesma para o style do window.

     


    Marcelo A. Prado
    quinta-feira, 27 de maio de 2010 13:52
  • Marcelo,

    Sei que já faz muito tempo, mas, conseguiu resolver sua dúvida?


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    domingo, 13 de junho de 2010 20:31
    Moderador
  • Marcelo,

    Veja se isto te ajuda em algo:

    http://social.msdn.microsoft.com/Forums/en/wpf/thread/b41be07c-6dd8-41da-943f-e0279a9677c3


    André Alves de Lima
    Visite o meu site: http://andrealveslima.spaces.live.com
    Me siga no Twitter: @andrealveslima
    quinta-feira, 17 de junho de 2010 22:21
    Moderador
  • Marcelo uma outra opcao eh utilizar o componente Window do infragistics que eh muito bom.

    Ou utilizar esse artigo que tem um tutorial de como customizar a Window

    http://www.kirupa.com/blend_wpf/custom_wpf_windows.htm

    terça-feira, 29 de junho de 2010 15:08