2015-03-17 7 views
0

Вот отрывок из моего представления xaml. Текст textBlock может быть довольно длинным. Однако я хотел бы сделать строку в столбце 0 (LineGeometry) равной той же высоте, что и этот TextBlock.Как сделать дочерний элемент заполнить его родительский элемент

<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="40"></ColumnDefinition> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Path Grid.Column="0" Stroke="Black" StrokeThickness="3" Fill="Black"> 
     <Path.Data> 
     <GeometryGroup> 
      <LineGeometry StartPoint="7,0" EndPoint="7,70"/> 
      <EllipseGeometry Center="7,20" RadiusX="5" RadiusY="5" /> 
     </GeometryGroup> 
     </Path.Data> 
    </Path> 
    <TextBlock Grid.Column="1" Text="ldkfjlgdlgjljd &#x0a; fsm &#x0a; jklgf &#x0a;dmj &#x0a;dfm &#x0a;ljdgms &#x0a; kjlk &#x0a; jfdlkjsg"></TextBlock> 
    </Grid> 

Спасибо за вашу помощь

+0

Вы пытались удалить элемент холста и сразу же поместить границу в сетку? –

+0

Возможно ли сделать «TextBlock» дочерним элементом «границы»? – BradleyDotNET

+0

Я удалил границу, это было использовано только для отладки цели – Dave

ответ

2

Это отвечает несколько ваше требование

<Grid> 
    <Canvas> 
     <Border BorderBrush="#FFFF00" BorderThickness="2"> 
      <StackPanel Orientation="Horizontal"> 
       <Grid Margin="5,0"> 
        <Border Width="2" Background="Black" /> 
        <Ellipse Fill="Black" Width="12" Height="12" /> 
       </Grid> 
       <TextBlock Text="ldkfjlgdlgjljd &#x0a; fsm &#x0a; jklgf &#x0a;dmj &#x0a;dfm &#x0a;ljdgms &#x0a; kjlk &#x0a; jfdlkjsg&#x0a; jfdlkjsg"></TextBlock> 
      </StackPanel> 
     </Border> 
    </Canvas> 
</Grid> 
+0

Спасибо Sayka, Он делает эту работу! – Dave

1

Heres грубый рабочий пример. Я хотел бы предложить добавить нулевой проверки т.д., Во-первых позволяет создать конвертер, который возвращает Point

public class LineLengthConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    {    
     var textBox = value as TextBlock; 

     double textHeight = textBox.ActualHeight; 
     var endpoint = new Point(7.0, textHeight); 
     return endpoint; 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

Теперь Xaml (Ive добавил все XAML, так что вы можете видеть ссылку на преобразователь в качестве ресурса. Н.Б. TextBlock находится в Canvas панели и связывание LineGeometry.EndPoint

<Window x:Class="WpfApplication9.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" 
    xmlns:local="clr-namespace:WpfApplication9"> 
<Window.Resources> 
    <local:LineLengthConverter x:Key="LineLengthConverter" /> 
</Window.Resources> 
<Grid> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="40"></ColumnDefinition> 
     <ColumnDefinition/> 
    </Grid.ColumnDefinitions> 
    <Grid> 
     <Border BorderBrush="#FFFF00" BorderThickness="2">     
       <Path Stroke="Black" StrokeThickness="3" Fill="Black"> 
        <Path.Data> 
         <GeometryGroup> 
          <LineGeometry StartPoint="7,0" EndPoint="{Binding ElementName=someText, Converter={StaticResource LineLengthConverter}}" /> 
          <EllipseGeometry Center="7,20" RadiusX="5" RadiusY="5" /> 
         </GeometryGroup> 
        </Path.Data> 
       </Path>     
     </Border> 
     <Canvas> 
      <TextBlock x:Name="someText" Text="ldkfjlgdlgjljd &#x0a; fsm &#x0a; jklgf &#x0a;dmj &#x0a;dfm &#x0a;ljdgms&#x0a; jklgf &#x0a;dmj &#x0a;dfm &#x0a;ljdgms &#x0a; kjlk &#x0a; jfdlkjsg"></TextBlock> 
     </Canvas> 
    </Grid>   
</Grid> 

Ho pe это помогает

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

  • Нет связанных вопросов^_^