2016-05-16 8 views
0

Ich versuche Ausrufezeichen neben dem Text für Validierung Ausnahme zu machen. Es ist mein eigenes Template gibt es meinen XAML:Positionieren von Textblöcken in Steuerelementvorlage

<Window x:Class="WpfApplicationLAB.NewGameWindow" 
     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:local="clr-namespace:WpfApplicationLAB" 
     mc:Ignorable="d" 
     Height="80" Width="260" 
     WindowStyle="None" 
     WindowStartupLocation="CenterScreen" 
     AllowsTransparency="False" 
     Title="NewGameWindow" 
     ResizeMode="CanResize" MinWidth="180" MinHeight="90"> 
    <Grid Name="GridInputName"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="25*"/> 
      <RowDefinition Height="29*"/> 
      <RowDefinition Height="28*"/> 
     </Grid.RowDefinitions> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="51*"/> 
      <ColumnDefinition Width="121*"/> 
     </Grid.ColumnDefinitions> 
     <Label Grid.Row="1" Grid.Column="0" Content="Size:" HorizontalContentAlignment="Center"/> 
     <TextBox Name="textBox" Grid.Row="1" Grid.Column="1"> 
      <TextBox.Text> 
       <Binding Path="Ssize" UpdateSourceTrigger="PropertyChanged"> 
        <Binding.ValidationRules> 
         <local:SizeValidation/> 
        </Binding.ValidationRules> 
       </Binding> 
      </TextBox.Text> 
     </TextBox> 
     <Button Name="Cancel" 
      Grid.Row="2" Grid.Column="0" Content="Cancel" Click="Cancel_Click" > 
     </Button> 
     <Button Name="Ok" 
      Grid.Row="2" Grid.Column="1" Content="Ok" Click="Ok_Click"> 
     </Button> 
    </Grid> 
    <Window.Resources> 
     <Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Validation.ErrorTemplate"> 
       <Setter.Value> 
        <ControlTemplate> 
         <StackPanel> 
          <Border Background="Red" Margin="0,0,0,0" Width="20" Height="20" CornerRadius="10" 
          ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
           <TextBlock Text="!" VerticalAlignment="center" HorizontalAlignment="center" FontWeight="Bold" Foreground="white"> 
           </TextBlock> 
          </Border> 
          <TextBlock 
         Margin="5,0,0,0" 
         Foreground="Red" 
         Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
          </TextBlock> 
          <Border BorderBrush="Red" BorderThickness="1" Margin="5,0,5,0" > 
           <AdornedElementPlaceholder Name="MyAdorner" ></AdornedElementPlaceholder> 
          </Border> 
         </StackPanel> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
</Window> 

Ich möchte das Ausrufezeichen auf der linken Seite des Textes, kann ich es sowieso nicht erreichen Ich versuche, mit Stapelfeld und es ist Ausrichtung geändert, Dock Platten usw. Mit diesem Code sieht es aus, dass: How It looks like

in einigen verschiedenen Variablen auf der linken Seite der Textbox sein kann Irgendwelche Tipps?

+0

Haben Sie versucht, das StackPanel in einem DockPanel zu belassen und die Eigenschaft DockPanel.Dock = "Left" Orientation = "Horizontal" in StackPanel festzulegen. – riteshmeher

+0

funktioniert leider nicht :(halb-suffice-Lösung, es sieht gut aus, bis jemand nicht die Größe ändert, aber ich kann die Größeneinstellung abschalten :) – Vinci

Antwort

0

Versuchen Sie, die Border mit Background="Red" und die TextBlock mit Foreground="Red" in einem StackPanel mit Orientation="Horizontal" zu wickeln.

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="Validation.ErrorTemplate"> 
    <Setter.Value> 
     <ControlTemplate> 
     <StackPanel> 
      <StackPanel Orientation="Horizontal"> 
      <Border Background="Red" 
        Margin="0" 
        Width="20" 
        Height="20" 
        CornerRadius="10" 
        ToolTip="{Binding ElementName=customAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
       <TextBlock Text="!" 
         VerticalAlignment="center" 
         HorizontalAlignment="center" 
         FontWeight="Bold" 
         Foreground="white"/> 
      </Border> 
      <TextBlock Margin="5,0,0,0" 
         Foreground="Red" 
         Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/> 
      </StackPanel> 
      <Border BorderBrush="Red" BorderThickness="1" Margin="5,0" > 
      <AdornedElementPlaceholder Name="MyAdorner"/> 
      </Border> 
     </StackPanel> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
</Style> 

Das funktionierte für mich.

PS: Ist Ihnen aufgefallen, dass Sie MinHeight="90" ... und dann Height="80" geschrieben haben? Macht es Sinn für dich?

Verwandte Themen