2012-05-14 150 views
0

我有一个UI象下面这样:通过控制绘制垂直线

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> 

没有电网。它现在有时会在设计师中展示,而其他时间则不会。而当运行并没有显示出来。我需要网格吗?

+0

可以添加spiltter,检查这个http://learnwpf.com/post/2006/05/08/How-Do-I-Add-a-Splitter-to-my-WPF-Window.aspx –

+0

@Ravi这将是可怕的。他只需要图形,而不是完整的分割器功能。看到这个问题的答案:http://stackoverflow.com/questions/3702140/draw-lines-and-circles-in-wpf(ps谷歌搜索花费的时间比它会让我写你的问题) – SimpleVar

+0

@ YoryeNathan说,这个链接是我自己的问题! – sprocket12

回答

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> 
+0

对不起,我的第一个WPF项目我不知道这很简单。接下来的n00b问题,y2需要是堆栈面板的高度,我是在代码中执行此操作还是可以从xaml执行? – sprocket12

+0

类似于{{Binding ElementName =“Messages”Path = ActualHeight ..}' –

+0

嗨,感谢您的回复,请参阅上面的更新。我没有在消息上执行ActualHeight,因为出于某种原因,滚动条内的内容会展开,滚动条会显示。 – sprocket12

0

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

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

像这样堆叠是否会对性能产生负面影响?我问这个,因为我已经感觉WPF渲染我的自定义控件的速度很慢。 – sprocket12

+0

不应该是一种内在的影响或“绘画神器”,因为它计算在绘画之前将要呈现给屏幕的内容。 –