2013-04-06 3 views
2

У меня есть три файла xaml.Стиль Wpf применяется в дизайнере, но не применяется во время выполнения

  1. Button.xaml (кнопка стиль)
  2. Default.xaml (Тема файл) (Включает в себя сливают файл ресурсы кнопки)
  3. MainWindo.xaml (Использует default.xaml словаря ресурсов).

Button.xaml:

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

<ControlTemplate x:Key="ButtonControlTemplate" TargetType="Button"> 
    <Border Name="Back" > 
     <Border.Background> 
      <ImageBrush ImageSource="..\Images\ButtonBackground.png" /> 
     </Border.Background> 
     <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" /> 
    </Border> 
    <ControlTemplate.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter TargetName="Back" Property="Effect"> 
       <Setter.Value> 
        <DropShadowEffect ShadowDepth="0" Direction="0"    
              BlurRadius="15"Color="#D3F80A" Opacity="1"/> 
       </Setter.Value> 
      </Setter> 
     </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

<Style TargetType="{x:Type Button}"> 
    <Setter Property="Template" Value="{StaticResource ButtonControlTemplate}" /> 
</Style> 

</ResourceDictionary> 

Default.xaml:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:primatives="clr-namespace:System.Windows.Controls;assembly=PresentationFramework"> 

    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Controls\Button.xaml"></ResourceDictionary> 
    </ResourceDictionary.MergedDictionaries> 

</ResourceDictionary> 

MainWindow.xaml:

<Window x:Class="RemoteDesktop.GUI.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="375" Width="195" WindowStyle="None" Topmost="True" AllowsTransparency="True" Background="Transparent" WindowStartupLocation="CenterScreen" ResizeMode="NoResize" 
     TextOptions.TextFormattingMode="Ideal" 
     > 
    <Window.Resources> 

     <ResourceDictionary> 
      <ResourceDictionary.MergedDictionaries> 
       <ResourceDictionary Source=".\Themes\Default\Default.xaml" /> 
      </ResourceDictionary.MergedDictionaries> 


     </ResourceDictionary> 


    </Window.Resources> 

    <Border x:Name="border" Margin="10" CornerRadius="10,10,10,10" BorderBrush="#111111" BorderThickness="0"> 
     <Border.Background> 
      <ImageBrush ImageSource=".\Resources\Background.png" Stretch="Fill" /> 
     </Border.Background> 
     <Border.Effect> 
      <DropShadowEffect ShadowDepth="0" Direction="0" BlurRadius="15" Color="Black" Opacity="1"/> 
     </Border.Effect> 
     <Grid > 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition ></ColumnDefinition> 
       <ColumnDefinition Width="58" ></ColumnDefinition> 
       <ColumnDefinition Width="10" ></ColumnDefinition> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="33" /> 
       <RowDefinition Height="15"/> 
       <RowDefinition Height="33" /> 
       <RowDefinition Height="15"/> 
       <RowDefinition Height="33"/> 
       <RowDefinition Height="23"/> 
       <RowDefinition Height="33"/> 
      </Grid.RowDefinitions> 
      <Border Background="Transparent" Name="titleBorder" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" MouseLeftButtonDown="titleBorder_MouseLeftButtonDown"> 
       <Label Foreground="LightGray" TextOptions.TextHintingMode="Animated" FontSize="14" VerticalAlignment="Center" HorizontalAlignment="Center" >Please Log In</Label> 
      </Border> 
      <TextBox Grid.Row="2" Grid.Column="0" Width="148" Height="32" Grid.ColumnSpan="3" > 
       Email 
      </TextBox> 
      <TextBox Grid.Row="4" Grid.Column="0" Width="148" Height="32" Grid.ColumnSpan="3" > 
       Password 
      </TextBox> 
      <Button Name="btn" Grid.Row="6" Grid.Column="1" BorderThickness="0" Foreground="#232323" Content="Sign In" TextOptions.TextHintingMode="Animated" BorderBrush="{x:Null}" > 

       <!--<Button.Style> 
        <Style TargetType="Button"> 

         <Setter Property="OverridesDefaultStyle" Value="True"/> 
         <Setter Property="Template"> 
          <Setter.Value> 
           <ControlTemplate TargetType="{x:Type Button}"> 
            <Border Name="Back" > 
             <Border.Background> 
              <ImageBrush ImageSource=".\Resources\ButtonBackground.png" /> 
             </Border.Background> 
             <TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" Text="{Binding Content, RelativeSource={RelativeSource TemplatedParent}}" ></TextBlock> 
            </Border> 
            <ControlTemplate.Triggers> 
             <Trigger Property="IsMouseOver" Value="True"> 
              <Setter TargetName="Back" Property="Effect"> 
               <Setter.Value> 
                <DropShadowEffect ShadowDepth="0" Direction="0" BlurRadius="15" Color="#D3F80A" Opacity="1"/> 
               </Setter.Value> 
              </Setter> 
             </Trigger> 
            </ControlTemplate.Triggers> 
           </ControlTemplate> 

          </Setter.Value> 
         </Setter> 


        </Style> 
       </Button.Style>--> 

      </Button> 
     </Grid> 
    </Border> 
</Window> 

Здесь, в стиле кнопки окна, применяется во время разработки, но время выполнения сбрасывается до состояния по умолчанию.

+0

Что скажет Snoop (https://snoopwpf.codeplex.com) о том, где находится шаблон для кнопки? – briantyler

ответ

0

, как я вижу, у вас есть

RootDirectory \ управление \ button.xaml

RootDirectory \ Themes \ умолчанию \ default.xaml

RootDirectory \ MainWindow.xaml

так вот вещь

по умолчанию.xaml вам нужно пойти в директории позади, чтобы получить доступ к вашей кнопке управления, как это

<ResourceDictionary Source="..\..\Controls\Button.xaml"></ResourceDictionary> 
+0

не забудьте очистить проект –

Смежные вопросы