2014-03-18 2 views
0

У меня есть простая сетка WPF в качестве примера, причем каждая строка имеет одинаковую высоту (*). Каждая из трех строк содержит одно текстовое поле внутри. Я хотел бы знать, возможно ли в XAML указать, что когда текстовое поле получает фокус, соответствующая строка должна увеличиться до 2 * (тем самым увеличивая размер для текстового поля).WPF сетка: стиль набора для сфокусированных строк

Благодаря ...

-ben

<Window x:Class="WpfApplication2.MainWindow"      
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525"> 

    <Grid> 
     <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <TextBox Background="AliceBlue" Grid.Row="0" /> 
     <TextBox Background="AliceBlue" Grid.Row="1" /> 
     <TextBox Background="AliceBlue" Grid.Row="2" /> 
    </Grid> 
</Window> 

ответ

0

Вы можете установить в значении стиля для Grid.Row с помощью Trigger так:

<Style TargetType="{x:Type TextBox}"> 
    <Style.Triggers> 
     <Trigger Property="IsFocused" Value="True"> 
      <Setter Property="Grid.Row" Value="2" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Но поместить все элементы Grid необходимо установить значение для Grid.Row локально. В этом случае, учитывая Dependency Property Value Precedence, мы имеем в значениях Style, которые будут проигнорированы.

Я рекомендую вам просто установить Height для TextBox, например, так:

<Window.Resources> 
    <Style TargetType="{x:Type TextBox}"> 
     <Setter Property="Height" Value="100" /> 
     <Setter Property="Background" Value="AliceBlue" /> 

     <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Setter Property="Height" Value="200" /> 
       <Setter Property="Background" Value="Beige" /> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <TextBox Name="TextBox1" Grid.Row="0" /> 
    <TextBox Name="TextBox2" Grid.Row="1" /> 
    <TextBox Name="TextBox3" Grid.Row="2" /> 
</Grid> 

Или скрыть/показать TextBox через Eventtriggers в зависимости от направленности. Для этого вы просто для каждого TextBox, чтобы создать EventTrigger с GotFocus и LostFocus событий. Для получения дополнительной информации, пожалуйста, см это:

MSDN: EventTrigger

+0

Привет Анатолий, в отношении первого предложения, не изменит ли значение «grid.row» на самом текстовом поле? Значит, не переместило бы текстовое поле в другую строку сетки, а не повлияло бы на размер соответствующей строки? – BenjiFB

+0

@BenjiFB: Да, это изменит значение для текущего 'TextBox'. Кажется, проще изменить высоту непосредственно для каждого элемента управления или использовать EventTriggers с событиями фокуса. –

+0

> или использовать EventTriggers с событиями фокуса. Должен ли я по-прежнему настраивать размер самого текстового поля, или я могу использовать EventTrigger для настройки размера содержащейся строки? – BenjiFB

0

Вы просто пытаетесь сделать размер шрифта больше, когда любой TextBlock получает фокус? Если да, то вот один из способов сделать это

<Window.Resources> 
    <Style TargetType="TextBox"> 
     <Style.Triggers> 
      <Trigger Property="IsFocused" Value="True"> 
       <Setter Property="FontSize" Value="20"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

<Grid> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 

     <TextBox Background="AliceBlue" Grid.Row="0" /> 
     <TextBox Background="AliceBlue" Grid.Row="1" /> 
     <TextBox Background="AliceBlue" Grid.Row="2" /> 
    </Grid> 
</Grid> 
+0

Не совсем. Как и в случае, каждое текстовое поле занимает равную часть (33,3%) окна. Я хочу, чтобы он, когда пользователь нажимает текстовое поле, занимает большую часть (50%, с 25% + 25% для двух других). Поэтому, чтобы перейти от (* * *) к (* 2 * *), когда что-то щелкнули. – BenjiFB

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