Wpf 混合到背景中的文本框
如何创建一个融入背景页面的文本框,这里的想法是我想创建一个类似笔记本的效果,线条和用户类型在线条上(就像在笔记本中用线条书写一样)。拿一个透明背景的Wpf 混合到背景中的文本框,wpf,silverlight,windows-phone-7,Wpf,Silverlight,Windows Phone 7,如何创建一个融入背景页面的文本框,这里的想法是我想创建一个类似笔记本的效果,线条和用户类型在线条上(就像在笔记本中用线条书写一样)。拿一个透明背景的文本框,将其放在笔记本纸图像的顶部,对齐字体大小,使其看起来符合要求。您可能需要使用ViewBox <TextBox TextWrapping="Wrap" Background="{x:Null}"/> 有一种更好的方法可以做到这一点。您只需覆盖默认样式并使文本框透明即可。像那样 <TextBox Style="{Static
文本框
,将其放在笔记本纸图像的顶部,对齐字体大小,使其看起来符合要求。您可能需要使用ViewBox
<TextBox TextWrapping="Wrap" Background="{x:Null}"/>
有一种更好的方法可以做到这一点。您只需覆盖默认样式并使文本框透明即可。像那样
<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>
崩溃
看得见的
崩溃
看得见的
根据需要设置文本框的样式,以便背景显示出来。要删除文本框的背景、填充、边框等,请使用:
<TextBox Margin="0" BorderThickness="0" Padding="0" Background="Transparent" />
如果你能用一行代码达到同样的效果,那么写81行代码会更好吗?;)@斯塔:同意。。。但我不敢相信你竟然费心数数这些行:)@HiTech Magic:Notepad++,ctrl-c,ctrl-v:)@StaWho:Revised。。。但我不敢相信,你竟然用Notepad++,ctrl-c,ctrl-v:>费劲地数数这些行,其中大部分是由Expression Blend生成的,这对于任何使用wpf/silverlight的人来说都是非常有用的工具。此外,这种方式封装了布局中的样式,这在控件由数百行代码组成时非常重要……并且去掉边框BorderBrush=“{x:Null}”
或BorderThickness=“0”您确定TextBlock.LineHeight
和TextBlock.LineStackingStrategy
实际上是附加属性吗?Blend说,当我尝试您的示例时,它们“…只能应用于从TextBlock派生的类型”(即普通依赖属性)。VS2010还说,“在类型TextBlock中找不到附加的属性LineHeight”。。。您是否使用将这些作为附加属性的TextBlock扩展?如果是,请说明。
<TextBox Margin="0" BorderThickness="0" Padding="0" Background="Transparent" />
<TextBox
Margin="0" BorderThickness="0" Padding="0" Background="Transparent"
TextBlock.LineHeight="10"
TextBlock.LineStackingStrategy="BlockLineHeight" />