2015-12-30 1 views
0

Я создал собственный стиль для текстового поля с использованием PATH. Ящик точно выглядит так, как я этого хотел, но когда я пишу какой-либо текст в нем, ничего не появляется. Казалось бы, что-то внутри моего стиля либо блокирует его, либо мне нужно что-то добавить для контента. Но я не уверен, что именно, кто-нибудь знает, что я могу сделать, чтобы текст появился внутри пользовательского окна?Текстовое поле, не отображающее текст после того, как я его создал с помощью пути

<Style x:Key="AppearingTextbox" TargetType="{x:Type TextBox}"> 
    <Setter Property="Cursor" Value="Arrow"/> 
    <Setter Property="Foreground" Value="#3E82C4"/> 
    <Setter Property="Background" Value="#0F1C2B"/> 
    <Setter Property="Opacity" Value="0"/> 
    <Setter Property="IsReadOnly" Value="True"/> 
    <Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type TextBox}"> 
     <StackPanel> 
      <Path Data="M0 0 30 0 50 -10 70 0 100 0 100 30 0 30z" Fill="#0F1C2B"/> 
     </StackPanel> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
    <DataTrigger Binding="{Binding ElementName=Ikona, Path=IsMouseOver}" Value="True"> 
     <DataTrigger.EnterActions> 
     <BeginStoryboard > 
      <Storyboard TargetProperty="Opacity" Duration="00:00:00.3" AutoReverse="False"> 
      <DoubleAnimation From="0" To="1" Duration="00:00:00.3"/> 
      </Storyboard> 
     </BeginStoryboard> 
     </DataTrigger.EnterActions> 
     <DataTrigger.ExitActions> 
     <BeginStoryboard > 
      <Storyboard TargetProperty="Opacity" Duration="00:00:00.3" AutoReverse="False"> 
      <DoubleAnimation From="1" To="0" Duration="00:00:00.3"/> 
      </Storyboard> 
     </BeginStoryboard> 
     </DataTrigger.ExitActions> 
    </DataTrigger> 
    </Style.Triggers> 
</Style> 

Это применяется к этому TextBox:

<TextBox Style="{DynamicResource AppearingTextbox}" Height="30" Width="100" FontSize="10" Margin="0,480,0,0"> 
     Some text 
</TextBox> 

Благодаря кучу людей, мне удалось заставить его работать. Я не мог поместить его в тег границы, потому что тег границы принимает только один дочерний элемент. Вместо этого я использовал Grid. Сетка также хороша, потому что в документации я где-то читал, что позволяет складывать элементы друг на друга. Это то, что я сделал для тех, кто наткнется на это в будущем.

В <ControlTemplate> теге я сделал следующее:

<ControlTemplate TargetType="{x:Type TextBox}"> 
    <Grid> 
    <Path Data="M0 0 30 0 50 -10 70 0 100 0 100 30 0 30z" Fill="#0F1C2B"/> 
    <ScrollViewer Margin="0" x:Name="PART_ContentHost" /> 
    </Grid> 
</ControlTemplate> 

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

+0

Итак, когда вы добавить свой текст как 'Content' в TextBox, где в шаблоне является вашим 'Content' обрабатывается? Сравните ваши с дефолтом, я бы поспорил, что вы быстро заметили свою глупость. :) –

ответ

1

MSDN дает пример TextBox стиля и перебирает имени части. Для TextBox это PART_ContentHost, который отображает его содержимое. В шаблоне по умолчанию это ScrollViewer:

<ScrollViewer Margin="0" x:Name="PART_ContentHost" /> 

Если добавить его в StackPanel элементы будут отображаться подряд, но вам нужно вывести текст вперед от вашего Path. Затем измените StackPanel на Grid.

<Grid> 
    <Path Data="M0 0 30 0 50 -10 70 0 100 0 100 30 0 30z" Fill="#0F1C2B"/> 
    <ScrollViewer Margin="0" x:Name="PART_ContentHost" /> 
</Grid> 

Далее нам нужно выровнять элементы друг с другом, то вы можете добавить VerticalAlignment и HorizontalAlignment.

<Grid> 
    <Path VerticalAlignment="Center" HorizontalAlignment="Center" Data="M0 0 30 0 50 -10 70 0 100 0 100 30 0 30z" Fill="#0F1C2B"/> 
    <ScrollViewer VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" x:Name="PART_ContentHost" /> 
</Grid> 

И наконец, у вас есть еще одна проблема. По умолчанию цвет текста черный.Вы можете изменить его переопределение переднего плана объекта недвижимости:

<Setter Property="Foreground" Value="White" /> 

Полного стиль будет выглядеть следующим образом:

<Style x:Key="AppearingTextbox" TargetType="{x:Type TextBox}"> 
    <Setter Property="Cursor" Value="Arrow"/> 
    <Setter Property="Foreground" Value="#3E82C4"/> 
    <Setter Property="Background" Value="#0F1C2B"/> 
    <Setter Property="Opacity" Value="0"/> 
    <Setter Property="IsReadOnly" Value="True"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TextBoxBase}"> 
       <Grid> 
        <Path VerticalAlignment="Center" HorizontalAlignment="Center" Data="M0 0 30 0 50 -10 70 0 100 0 100 30 0 30z" Fill="#0F1C2B"/> 
        <ScrollViewer VerticalAlignment="Center" HorizontalAlignment="Center" Margin="0" x:Name="PART_ContentHost" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding ElementName=Ikona, Path=IsMouseOver}" Value="True"> 
      <DataTrigger.EnterActions> 
       <BeginStoryboard > 
        <Storyboard TargetProperty="Opacity" Duration="00:00:00.3" AutoReverse="False"> 
         <DoubleAnimation From="0" To="1" Duration="00:00:00.3"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </DataTrigger.EnterActions> 
      <DataTrigger.ExitActions> 
       <BeginStoryboard > 
        <Storyboard TargetProperty="Opacity" Duration="00:00:00.3" AutoReverse="False"> 
         <DoubleAnimation From="1" To="0" Duration="00:00:00.3"/> 
        </Storyboard> 
       </BeginStoryboard> 
      </DataTrigger.ExitActions> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 
+0

Спасибо, но уже удалось это выяснить :) –

+0

Я собираюсь выбрать ваш ответ, потому что его очень обширный и много добавляет ответа –

+0

NP Я только что обновил свой вопрос, чтобы получить более подробное руководство по каждой части проблемы. –

2

TextBox шаблона требует названной часть

<ScrollViewer x:Name="PART_ContentHost" /> 

принять его содержание и обеспечивает функциональные возможности редактировать

От MSDN

Визуального элемент, который может содержать элемент FrameworkElement. Текст TextBox отображается в этом элементе.

Редактировать

<ControlTemplate TargetType="{x:Type TextBox}"> 
    <Grid> 
     <Path Data="M0 0 30 0 50 -10 70 0 100 0 100 30 0 30z" Fill="#0F1C2B"/> 
     <ScrollViewer x:Name="PART_ContentHost"/> 
    </Grid> 
</ControlTemplate> 
+0

пытался научить человека ловить рыбу, но +1, так как это правильно. –

+0

Но где я его положу? Когда я пытаюсь добавить его внутри шаблона управления, если у меня нет , я получаю «Визуальное дерево свойств установлено более одного раза». –

+0

@ChrisW. Я немного читал в сети и выяснил, что эта часть кода должна быть там. Но везде, где я пытаюсь это выразить, я получаю некоторые ошибки. Я даже попробовал добавить оба в стеке, но ничего не происходит ... im certanly отсутствует что-то маленькое .. –