边框仅添加到WPF中的第一个文本块

时间:2015-03-16 09:07:06

标签: c# wpf xaml

编辑:我意识到问题是什么,当我添加边框时,第二个TextBlock位于第一个TextBlock的顶部。仍然要弄清楚为什么会这样。

原始问题: 我的xaml中有许多TextBlock个。我想在一些文本块周围添加边框。我尝试了以下方法。

方法1:

<Style x:Key="BorderForTextBlock" TargetType="{x:Type Border}">
     <Setter Property="BorderThickness" Value="1" />
     <Setter Property="BorderBrush" Value="Black" />
</Style>


<TextBlock1../>
<Border Style="{StaticResource BorderForTextBlock}">
    <TextBlock2.../> 
</Border>

方法2:

<TextBlock1../> //This is where the border is added.
<Border BorderThickness="1" BorderBrush="Black">
    <TextBlock2 ..../>     //This is where I want to add the border
</Border>

边框仅添加到xaml中的第一个TextBlock,无论我添加边框的TextBlock。我不希望第一个TextBlock上的边框。我不知道为什么会这样。

这是我的xaml:

<Grid Background="LightYellow" >
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" ></ColumnDefinition>
        <ColumnDefinition Width="3.5*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <Grid.RowDefinitions>
        <RowDefinition Height="28*" ></RowDefinition>
        <RowDefinition Height="120*"  ></RowDefinition>
        <RowDefinition Height="28*"></RowDefinition>
        <RowDefinition Height="74*"></RowDefinition>
    </Grid.RowDefinitions>

<TextBlock Grid.Row="0" Margin="10,0,5,0" FontWeight="SemiBold" Text="{x:Static res:Resources.source1"/>
    <Border BorderBrush="Black" BorderThickness="1">
        <TextBlock x:Name="txtBlock1" FormatTest:FormattedTextBehavior.FormattedText="{Binding Path= content1}"   Margin="0,0,0,0"  Grid.Row="0" Grid.Column="1" TextWrapping="Wrap"/>
    </Border>
    <TextBlock Grid.Row="1"  Margin="10,0,5,0" FontWeight="SemiBold" Text="{x:Static res:Resources.source2}"/>

<RichTextBox Background="LightYellow" Margin="0,0,0,0"  ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" Grid.Row="1" Grid.Column="1" IsReadOnly="True"  >
        <FlowDocument>
            <Paragraph>
                <Run Text="{Binding content2, Mode=TwoWay}"/>
            </Paragraph>
        </FlowDocument>
    </RichTextBox>


<TextBlock Grid.Row="2"  Margin="10,0,5,0" FontWeight="SemiBold" Text="{x:Static res:Resources.source3"/>
<TextBlock Text="{Binding content3, Mode=TwoWay}"  Margin="0,0,0,0" Grid.Row="2" Grid.Column="1" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True" TextWrapping="Wrap"/>

    <TextBlock Grid.Row="3"   Margin="10,0,5,0" FontWeight="SemiBold" Text="{x:Static res:Resources.source4}"/>
<TextBox   Text="{Binding content4, Mode=TwoWay}"  Margin="0,0,0,0" Grid.Row="3" Grid.Column="1" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto"
     ScrollViewer.CanContentScroll="True" TextAlignment="Left" TextWrapping="Wrap" Background="LightYellow" IsReadOnly="True"/>

</Grid>

2 个答案:

答案 0 :(得分:1)

而不是

<Border BorderBrush="Black" BorderThickness="1">
    <TextBlock x:Name="txtBlock1" FormatTest:FormattedTextBehavior.FormattedText="{Binding Path= content1}"   Margin="0,0,0,0"  Grid.Row="0" Grid.Column="1" TextWrapping="Wrap"/>
</Border>

有无

<Border Grid.Row="0" Grid.Column="1" BorderBrush="Black" BorderThickness="1">
    <TextBlock x:Name="txtBlock1" FormatTest:FormattedTextBehavior.FormattedText="{Binding Path= content1}"   Margin="0,0,0,0" TextWrapping="Wrap"/>
</Border>

这可以解决放置文本块的问题

这是我看到我的结尾enter image description here

的方式

试试这个并告诉我们

答案 1 :(得分:0)

您可以将样式与触发器一起使用,并根据您想要的范围将样式放在Windows资源或应用程序资源中

    <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.Resources>
            <Style x:Key="NotCalledBorder" TargetType="{x:Type Border}">
                <Setter Property="BorderThickness" Value="1" />
                <Setter Property="BorderBrush" Value="Black" />
                <Setter Property="Height" Value="20"/>
                <Setter Property="Width" Value="30"/>
                <Setter Property="HorizontalAlignment" Value="Left"/>
            </Style>
            <Style TargetType="TextBlock">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="TextDecorations" Value="Underline" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Grid.Resources>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>
        <Border Style="{StaticResource NotCalledBorder}" Grid.Row="0">
            <TextBlock Text="test1" Grid.Row="0" OpacityMask="Black">
            </TextBlock>
        </Border>
        <TextBlock Text="test2" Grid.Row="1"></TextBlock>
        <Border Style="{StaticResource NotCalledBorder}" Grid.Row="2">
            <TextBlock Text="test3" Grid.Row="2" OpacityMask="Black"></TextBlock>
         </Border>
        <TextBlock Text="test4" Grid.Row="3"></TextBlock>
    </Grid>
</Window>

Conditional style in WPF。仅为两个文本块添加边框。您可以应用样式并添加到您想要的任意数量