2016-05-16 2 views
0

Im пытается сделать восклицательный знак рядом с текстом для исключения проверки. Там мой пользовательский шаблон есть мой XAML:Позиционирование тексблоков в шаблоне управления

<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> 

Я хочу восклицательный знак на левой стороне текста, я не могу добраться до него в любом случае я стараюсь, с панелью стеки и его ориентация изменилась, док панели и т.д. с помощью этого кода он выглядит, что: How It looks like

в некоторых различных переменных, это может быть на левой стороне текстового поля Любые советы?

+0

Вы пытались сохранить StackPanel внутри DockPanel и установить DockPanel.Dock = "Left" Orientation = "Horizontal" свойство в StackPanel. – riteshmeher

+0

, к сожалению, не работает :(получил полу-достаточное решение, он отлично выглядит, пока кто-то не изменит его размер, но я могу отключить калибровку :) – Vinci

ответ

0

Попробуйте обернуть Border с Background="Red" и TextBlock с Foreground="Red" в StackPanel с Orientation="Horizontal".

<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> 

Это сработало для меня.

PS: Вы поняли, что написали MinHeight="90" ... и затем Height="80"? Это имеет смысл для вас?

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