2017-12-26 33 views
0

bitte entschuldige mich für meine Schwäche in Englisch. Ich bin neu bei WPF, und ich habe ein Problem hier als Frage Titel. Ich habe versucht, ein WPF-Benutzersteuerelement als Schaltfläche zu implementieren. aber wenn ich den Knopf in meiner App benutzen möchte. Ich habe Fehler. Hier ist mein Code & Fehler.Warum sind meine Stile verschwunden, wenn die Steuerschaltfläche für den Benutzer in WPF festgelegt wurde?

User Control XAML-Code:

<UserControl x:Class="AADControls.Buttons.Warning" 
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:AADControls.Buttons" 
      mc:Ignorable="d" 
      d:DesignHeight="300" d:DesignWidth="300"> 
    <UserControl.Resources> 
     <LinearGradientBrush x:Key="aad-warning-back-brush" StartPoint="0.5,0" EndPoint="0.5,1"> 
      <GradientStop Offset="0" Color="#FFF0F200"/> 
      <GradientStop Offset="1" Color="#FFFF8800"/> 
     </LinearGradientBrush> 
     <LinearGradientBrush x:Key="aad-warning-border-brush" StartPoint="0.5,0" EndPoint="0.5,1"> 
      <GradientStop Offset="0" Color="#FFF0F200"/> 
      <GradientStop Offset="1" Color="#FFFF8800"/> 
     </LinearGradientBrush> 
    </UserControl.Resources> 
    <Button Name="BtnWarning" Width="250" Height="50" 
      Content="AAD Button"> 
     <Button.Template> 
      <ControlTemplate TargetType="{x:Type Button}"> 
       <Border Name="AADBorder" 
           CornerRadius="10" 
           BorderThickness="4" 
           BorderBrush="{StaticResource aad-warning-border-brush}" 
           Background="{StaticResource aad-warning-back-brush}"> 
        <ContentPresenter Content="{TemplateBinding Content}" 
             HorizontalAlignment="Center" 
             VerticalAlignment="Center"/> 
       </Border> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsMouseOver" Value="True"> 
         <Setter Property="RenderTransform"> 
          <Setter.Value> 
           <ScaleTransform ScaleX="1.1" ScaleY="1.1"/> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
        <Trigger Property="IsPressed" Value="True"> 
         <Setter Property="RenderTransform"> 
          <Setter.Value> 
           <ScaleTransform ScaleX="1.0" ScaleY="1.0"/> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
        <Trigger Property="IsMouseCaptured" Value="true"> 
         <Setter Property="Effect"> 
          <Setter.Value> 
           <DropShadowEffect Opacity="0.8" Direction="135" 
          ShadowDepth="3" BlurRadius="1" /> 
          </Setter.Value> 
         </Setter> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Button.Template> 
    </Button> 
</UserControl> 

Meine Verwendung von User Control:

<Window x:Class="DepaSOS.Pages.wndInitialize" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:AAD="clr-namespace:AADControls.Buttons;assembly=AADControls" 
    xmlns:local="clr-namespace:DepaSOS.Pages" 
    mc:Ignorable="d" 
    Title="launch-n-Initialization" 

    WindowStartupLocation="{StaticResource WSL}"> 



    <AAD:Warning Grid.Row="11" Grid.ColumnSpan="3"/> 

Das Problem ist jetzt, bis ich

<AAD:Warning Grid.Row="11" Grid.ColumnSpan="3"/> 

Jedes Ding verwenden ist ok und der Inhalt s hown ist ein Standardinhalt, der in dem Benutzer control.The Aussehen meiner Kontrolle gesetzt, wie dieses Bild ist: enter image description here

Aber, wenn ich nur Content-Eigenschaft auf meine Taste hinzufügen, ähnliche

<AAD:Warning Grid.Row="11" Grid.ColumnSpan="3" Content="Bla Bla Bla"/> 

, alle Dinge über Stil geht so schief Bild: enter image description here

Antwort

1

Das XAML innerhalb der <UserControl>...</UserControl> Element ist der Inhalt des UserControl. Standardmäßig enthält es einen Button. Sie ersetzen die Schaltfläche durch Text, sodass Sie anstelle der Schaltfläche den Text sehen. Sie verlieren nicht den Stil der Schaltfläche. Du verlierst den ganzen Knopf.

Sie tun nichts, das den Inhalt des Benutzersteuerelements in eine Schaltfläche platzieren könnte. Wenn Sie dies tun möchten, müssen Sie die Vorlage des UserControls festlegen: Die Vorlage bestimmt, wie der Inhalt dargestellt wird (Ihre eigene Schaltflächenvorlage demonstriert genau dies). Wie folgt aus:

<UserControl 
    x:Class="AADControls.Buttons.Warning" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:local="clr-namespace:AADControls.Buttons" 
    mc:Ignorable="d" 
    d:DesignHeight="300" d:DesignWidth="300" 
    Content="AAD Button" 
    > 
    <UserControl.Resources> 
     <LinearGradientBrush x:Key="aad-warning-back-brush" StartPoint="0.5,0" EndPoint="0.5,1"> 
      <GradientStop Offset="0" Color="#FFF0F200"/> 
      <GradientStop Offset="1" Color="#FFFF8800"/> 
     </LinearGradientBrush> 
     <LinearGradientBrush x:Key="aad-warning-border-brush" StartPoint="0.5,0" EndPoint="0.5,1"> 
      <GradientStop Offset="0" Color="#FFF0F200"/> 
      <GradientStop Offset="1" Color="#FFFF8800"/> 
     </LinearGradientBrush> 
    </UserControl.Resources> 

    <!-- This template contains the XAML you had for the Content. --> 
    <UserControl.Template> 
     <ControlTemplate TargetType="UserControl"> 
      <Button 
       Name="BtnWarning" 
       Width="250" 
       Height="50" 
       Content="{TemplateBinding Content}" 
       > 
       <Button.Template> 
        <ControlTemplate TargetType="{x:Type Button}"> 
         <Border 
          Name="AADBorder" 
          CornerRadius="10" 
          BorderThickness="4" 
          BorderBrush="{StaticResource aad-warning-border-brush}" 
          Background="{StaticResource aad-warning-back-brush}" 
          > 
          <ContentPresenter 
           Content="{TemplateBinding Content}" 
           HorizontalAlignment="Center" 
           VerticalAlignment="Center" 
           /> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsMouseOver" Value="True"> 
           <Setter Property="RenderTransform"> 
            <Setter.Value> 
             <ScaleTransform ScaleX="1.1" ScaleY="1.1"/> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
          <Trigger Property="IsPressed" Value="True"> 
           <Setter Property="RenderTransform"> 
            <Setter.Value> 
             <ScaleTransform ScaleX="1.0" ScaleY="1.0"/> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
          <Trigger Property="IsMouseCaptured" Value="true"> 
           <Setter Property="Effect"> 
            <Setter.Value> 
             <DropShadowEffect 
              Opacity="0.8" 
              Direction="135" 
              ShadowDepth="3" 
              BlurRadius="1" /> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Button.Template> 
      </Button> 
     </ControlTemplate> 
    </UserControl.Template> 
</UserControl> 

Hinweis ein paar Dinge:

  1. Die XAML Sie für den Inhalt hatte, ist jetzt alles in der Usercontrol Control
  2. Die Content des Button ist jetzt Content="{TemplateBinding Content}". Das bedeutet: "Suchen Sie die Content-Eigenschaft des Steuerelements, auf das die Vorlage angewendet wird, und verwenden Sie ihren Wert hier."
  3. Wir setzen jetzt die Content-Eigenschaft des UserControl auf "AAD Button" - den Text, den Sie zuvor dem Inhalt der Schaltfläche zugewiesen haben.

    Content="AAD Button" 
    

    , dass der Standardinhalt des Usercontrol sein wird, die in der Schaltfläche angezeigt werden, wenn Sie ihm etwas anderen Inhalt geben. Hier geben Sie zum Beispiel den Inhalt "Bla Bla Bla", der in der Schaltfläche angezeigt wird.

    <AAD:Warning Grid.Row="11" Grid.ColumnSpan="3" Content="Bla Bla Bla"/> 
    
+1

Vielen Dank mein Freund für Ihre vollständige Antwort und Beschreibungen – AminAmiriDarban

+1

@AminAmiriDarban zu helfen Glad. –

Verwandte Themen