通过控件绘制一条垂直线

时间:2012-05-14 09:07:19

标签: c# wpf

我有如下的用户界面:

enter image description here

问题是,除非屏幕被填充(它基本上是自定义控件上的边框),否则从消息中分割名称的行是不可见的。

我希望父控件(stackpanel)能够永久地通过它,而不必使用每个MessageControl上的边框。

这可能吗?

以下是stackpanel的代码:

<UserControl x:Class="ChatBoxWPF.ChatWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" d:DesignHeight="402" d:DesignWidth="700" xmlns:my="clr-namespace:ChatBoxWPF" VerticalContentAlignment="Stretch" VerticalAlignment="Stretch">
    <ScrollViewer>
        <StackPanel Name="Messages" VerticalAlignment="Bottom"></StackPanel>
    </ScrollViewer>
</UserControl>

更新1:

我试过了:

<ScrollViewer Name="scroll">
    <StackPanel Name="Messages" VerticalAlignment="Bottom">
            <Line StrokeThickness="1" X1="100" Y1="0" X2="100" Y2="{Binding ElementName=scroll, Path=ActualHeight}" />
        </StackPanel>
</ScrollViewer>

没有网格。它现在有时会在设计师中显示,有时则不会。并且在运行时根本不显示。我需要网格吗?

2 个答案:

答案 0 :(得分:0)

一种非常直率和简单的方法:

<Grid>
    <ScrollViewer>
        <StackPanel Name="Messages" VerticalAlignment="Bottom"></StackPanel>
    </ScrollViewer>
    <Line StrokeThickness="0.5" X1="116" X2="116" Y1="0" Stroke="Gainsboro" Y2="{Binding ElementName=ToLevelControl, Path=ActualHeight}" />
</Grid>

答案 1 :(得分:0)

我建议你为你的背景使用第二层 - 第二层可以是一个简单的网格或任何你喜欢的:

<Grid>
  <Grid ZIndex="0">
     <anything I want!>
  </Grid>
  <ScrollViewer ZIndex="1">
         <StackPanel Name="Messages" VerticalAlignment="Bottom">
         </StackPanel>
  </ScrollViewer>
</Grid>