2012-06-06 2 views
3

Как создать текстовое поле, которое вписывается в фоновое изображение, идея здесь заключается в том, что я хочу создать NoteBook, например Effect, с линиями и типами пользователей на линиях (так же, как писать в Notebook с линиями) ,Текстовый ящик, который смешивается с фоном

ответ

5

Возьмите TextBox с прозрачным фоном, положите его поверх изображения вашей записной книжки и выровняйте размер шрифта, чтобы он выглядел как нужно. Вы можете обернуть TextBox с ViewBox

<TextBox TextWrapping="Wrap" Background="{x:Null}"/> 

Или использовать TextBox с блокнотом изображения в качестве фона:

<TextBox TextWrapping="Wrap"> 
    <TextBox.Background> 
     <ImageBrush ImageSource="notebook-paper.png"/> 
    </TextBox.Background> 
</TextBox> 
+1

... и избавиться от границы 'BorderBrush =" {x: Null} "' – StaWho

+0

Или BorderThickness = "0" –

0

Существует лучший способ сделать это. Вы можете просто переопределить стиль по умолчанию и сделать TextBox прозрачным. Как это.

<TextBox Style="{StaticResource TransparentTextBox}"/> 

Вот что стиль:

<Style x:Key="TransparentTextBox" TargetType="TextBox"> 
     <Setter Property="FontFamily" Value="{StaticResource PhoneFontFamilyNormal}"/> 
     <Setter Property="FontSize" Value="{StaticResource PhoneFontSizeMediumLarge}"/> 
     <Setter Property="Background" Value="{StaticResource PhoneTextBoxBrush}"/> 
     <Setter Property="Foreground" Value="{StaticResource PhoneTextBoxForegroundBrush}"/> 
     <Setter Property="BorderBrush" Value="{StaticResource PhoneTextBoxBrush}"/> 
     <Setter Property="SelectionBackground" Value="{StaticResource PhoneAccentBrush}"/> 
     <Setter Property="SelectionForeground" Value="{StaticResource PhoneTextBoxSelectionForegroundBrush}"/> 
     <Setter Property="BorderThickness" Value="{StaticResource PhoneBorderThickness}"/> 
     <Setter Property="Padding" Value="2"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="TextBox"> 
        <Grid Background="Transparent"> 
         <VisualStateManager.VisualStateGroups> 
          <VisualStateGroup x:Name="CommonStates"> 
           <VisualState x:Name="Normal"/> 
           <VisualState x:Name="MouseOver"/> 
           <VisualState x:Name="Disabled"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBorder"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <Visibility>Collapsed</Visibility> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledOrReadonlyBorder"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <Visibility>Visible</Visibility> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
           <VisualState x:Name="ReadOnly"> 
            <Storyboard> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="EnabledBorder"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <Visibility>Collapsed</Visibility> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility" Storyboard.TargetName="DisabledOrReadonlyBorder"> 
              <DiscreteObjectKeyFrame KeyTime="0"> 
               <DiscreteObjectKeyFrame.Value> 
                <Visibility>Visible</Visibility> 
               </DiscreteObjectKeyFrame.Value> 
              </DiscreteObjectKeyFrame> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="DisabledOrReadonlyBorder"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="BorderBrush" Storyboard.TargetName="DisabledOrReadonlyBorder"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
             <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="DisabledOrReadonlyContent"> 
              <DiscreteObjectKeyFrame KeyTime="0" Value="{StaticResource PhoneTextBoxReadOnlyBrush}"/> 
             </ObjectAnimationUsingKeyFrames> 
            </Storyboard> 
           </VisualState> 
          </VisualStateGroup> 
          <VisualStateGroup x:Name="FocusStates"> 
           <VisualState x:Name="Focused"/> 
           <VisualState x:Name="Unfocused"/> 
          </VisualStateGroup> 
         </VisualStateManager.VisualStateGroups> 
         <Border x:Name="EnabledBorder" BorderThickness="{TemplateBinding BorderThickness}" Margin="{StaticResource PhoneTouchTargetOverhang}"> 
          <ContentControl x:Name="ContentElement" BorderThickness="0" HorizontalContentAlignment="Stretch" Margin="{StaticResource PhoneTextBoxInnerMargin}" Padding="{TemplateBinding Padding}" VerticalContentAlignment="Stretch" Content="sdasdasd"/> 
         </Border> 
         <Border x:Name="DisabledOrReadonlyBorder" BorderBrush="{StaticResource PhoneDisabledBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="Transparent" Margin="{StaticResource PhoneTouchTargetOverhang}" Visibility="Collapsed"> 
          <TextBox x:Name="DisabledOrReadonlyContent" Background="Transparent" Foreground="{StaticResource PhoneDisabledBrush}" FontWeight="{TemplateBinding FontWeight}" FontStyle="{TemplateBinding FontStyle}" FontSize="{TemplateBinding FontSize}" FontFamily="{TemplateBinding FontFamily}" IsReadOnly="True" SelectionForeground="{TemplateBinding SelectionForeground}" SelectionBackground="{TemplateBinding SelectionBackground}" TextAlignment="{TemplateBinding TextAlignment}" TextWrapping="{TemplateBinding TextWrapping}" Text="{TemplateBinding Text}" Template="{StaticResource PhoneDisabledTextBoxTemplate}"/> 
         </Border> 
        </Grid> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+2

Как писать 81 строку кода лучше, если вы можете добиться того же с одним? ;) – StaWho

+1

@StaWho: Согласен ... Но я не могу поверить, что вы взяли на себя труд сосчитать строки :) –

+0

@HiTech Magic: Notepad ++, ctrl-c, ctrl-v :) – StaWho

1

Стиль вашей TextBox как требуется, чтобы фон просвечивает. Для удаления текстового поля в фон, обивка, границы и т.д., использование:

<TextBox Margin="0" BorderThickness="0" Padding="0" Background="Transparent" /> 

Чтобы контролировать высоту строки так, чтобы он выстраивается аккуратно на вашем блокнота линии графика, используйте TextBlock присоединенные свойства:

<TextBox 
    Margin="0" BorderThickness="0" Padding="0" Background="Transparent" 
    TextBlock.LineHeight="10" 
    TextBlock.LineStackingStrategy="BlockLineHeight" /> 
+0

Вы уверены, что 'TextBlock.LineHeight' и' TextBlock.LineStackingStrategy' на самом деле являются прикрепленными свойствами? Blend говорит, что они «... могут применяться только к типам, полученным из TextBlock» *, когда я попробовал ваш образец (то есть нормальные свойства Dependency). –

+0

VS2010 также говорит: «Вложенное свойство LineHeight не найдено в типе TextBlock» ... Используете ли вы расширение для TextBlock, которое имеет такие свойства, как Attached Properties? Если так, пожалуйста, укажите. –

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