2015-01-28 2 views
0

Здесь у меня есть ListBox:Как получить высоту ListBox Item

<ListBox Name="listbox1" ItemsSource="{Binding Area}" Grid.Column="0" Grid.Row="0" HorizontalContentAlignment="Stretch"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Border BorderBrush="Green" BorderThickness="2" Margin="5" > 
         <Grid> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="1*"/> 
           <RowDefinition Height="1*"/> 
           <RowDefinition Height="2*"/> 
          </Grid.RowDefinitions> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="2*" /> 
           <ColumnDefinition Width="8*" /> 
          </Grid.ColumnDefinitions> 
          <DockPanel Grid.Row="0" Grid.Column="0" Margin="2"> 
           <TextBox PreviewTextInput="minMaxPreviewInput" IsReadOnly="{Binding AutoChange}" Text="{Binding MinIntValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="30" DockPanel.Dock="Right" TextAlignment="Right"/> 
           <TextBlock Text="Minimum Value" DockPanel.Dock="Left"/> 
          </DockPanel> 
          <DockPanel Grid.Row="1" Grid.Column="0" Margin="2"> 
           <TextBox PreviewTextInput="minMaxPreviewInput" IsReadOnly="{Binding AutoChange}" Text="{Binding MaxIntValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Width="30" DockPanel.Dock="Right" TextAlignment="Right"/> 
           <TextBlock Text="Maximum Value" DockPanel.Dock="Left"/> 
          </DockPanel> 
          <DockPanel Grid.Row="2" Grid.Column="0" Margin="2"> 
           <TextBlock Text="{Binding AreaName}" FontSize="20" DockPanel.Dock="Left"/> 
           <TextBlock Text=":" FontSize="20" DockPanel.Dock="Left"/> 
           <TextBlock Text="{Binding Start}" FontSize="20" DockPanel.Dock="Left"/> 
           <CheckBox FlowDirection="RightToLeft" DockPanel.Dock="Right" IsChecked="{Binding AutoChange, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
            <TextBlock FlowDirection="LeftToRight" Text="Auto-Change:" /> 
           </CheckBox> 

          </DockPanel> 
          <Border BorderBrush="Blue" BorderThickness="1" Grid.Column="1" Grid.RowSpan="3" Margin="5"> 
           <Canvas Name="canvas1" > 
            <Canvas.LayoutTransform> 
             <ScaleTransform ScaleX="1" ScaleY="-1" CenterX=".5" CenterY=".5" /> 
            </Canvas.LayoutTransform> 
            <Polyline Points="{Binding SegmentPoints}" Stroke="Black" StrokeThickness="1"/> 
           </Canvas> 
          </Border> 
         </Grid> 
        </Border> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

Все работает замечательно. У меня проблема с размером Canvas. Как я могу получить к нему доступ? Listbox.ActualHeight и ListBox.ActualWidth больше, чем Canvas, и мне нужно получить размер Canvas.

Спасибо за помощь заранее.

+0

Доступ к тому, откуда и откуда? Через относительную привязку в XAML? Непосредственно в коде? – toadflakz

+0

Уровень в коде, в MainWindow.xaml.cs. Вышеприведенный код из MainWindow.xaml –

+1

Поскольку у вас уже достаточно сложное связывание, почему вам нужно получить к нему доступ в коде? – toadflakz

ответ

0

Как вы пытаетесь обосновать ценность других связанных значений на Canvas размера, используйте режим OneWayToSource на Binding для ActualWidth и ActualHeight с некоторыми свойствами на вашем ViewModel.

Это приведет к изменению значений из элемента управления в ViewModel, что позволит вам отрегулировать значения в SegmentPoints так, чтобы они были правильно масштабированы в соответствии с размером Canvas.

+0

Большое спасибо! –