2013-07-31 1 views
0

랩 패널 (또는 다른 컨트롤)이 스크롤 뷰어 너비 계산에 참여하지 못하게 할 방법이 있습니까? 예를 들어, 아래에, 다른 컨트롤에 의해 만들어진 너비 내에서 랩 패널을 유지하고 너비 계산에 직접 영향을 미치지 싶습니다. (즉) Auto가 꺼져있을 때와 유사한 동작을 원하지만 다른 콘텐츠의 가로 스크롤이 더 넓어 지도록 허용합니다.WPF가 scrollviewer 너비에 영향을주지 않도록 하시겠습니까?

<Window x:Class="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> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="100" /> 
       <ColumnDefinition Width="1*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
      </Grid.RowDefinitions> 
      <WrapPanel Grid.Column="1" Name="ctlWrap" /> 
      <TextBox Grid.Row="1" Grid.Column="1" Width="100" HorizontalAlignment="Left" Name="ctlText" /> 
      <StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal"> 
       <Button Click="Button_Click">Add Wrap</Button> 
       <Button Click="Button_Click_1">Remove Wrap</Button> 
       <Button Click="Button_Click_2">Add Text</Button> 
       <Button Click="Button_Click_3">Remove Text</Button> 
      </StackPanel> 
     </Grid> 
    </ScrollViewer> 
</Grid> 
</Window> 

여기에 내가 버튼에 사용되는 코드는 다음과 같습니다

Class MainWindow 

Private Sub Button_Click(sender As Object, e As RoutedEventArgs) 
    ctlWrap.Children.Add(New Button With {.Content = "Button " & ctlWrap.Children.Count + 1}) 
End Sub 

Private Sub Button_Click_1(sender As Object, e As RoutedEventArgs) 
    If ctlWrap.Children.Count Then 
     ctlWrap.Children.RemoveAt(ctlWrap.Children.Count - 1) 
    End If 
End Sub 

Private Sub Button_Click_2(sender As Object, e As RoutedEventArgs) 
    ctlText.Width += 30 
End Sub 

Private Sub Button_Click_3(sender As Object, e As RoutedEventArgs) 
    If ctlText.Width > 60 Then ctlText.Width -= 30 
End Sub 
End Class 
+0

당신의 질문은 분명하지 않습니다 ... 당신이 자신의 커스텀'패널 '을 개발할 필요가있는 것 같지만, 당신이 원하는 것을 정확히 모르겠습니다. – Sheridan

+0

스크롤 패널 너비에 영향을주지 않고 스크롤 패널의 크기에 맞게 랩 패널을 사용하고 싶습니다. 두 가지 조건이 있습니다. 1) 다른 모든 내용이보기 공간에 맞습니다. 랩 패널은 뷰 공간의 너비 여야합니다. 2) 일부 다른 내용은보기 공간보다 넓으며 스크롤러는 그 너비까지 스크롤 할 수 있습니다. 랩 패널은 새로운 너비 여야합니다. 즉, 스크롤러 폭에 맞게 크기가 조정되지만 스크롤러 폭에는 영향을 미치지 않습니다. 내 시나리오에서 랩 패널은 스크롤러에있는 격자의 두 번째 열에 있습니다. – user2637281

답변

1

내가 약간 항복. 그리드의 왼쪽 열에 단추를 놓은 다음 폭과 최대 너비를 스크롤러의 뷰포트 폭에, 왼쪽 여백을 수평 오프셋에 바인딩합니다.

<Window x:Class="MainWindow" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:app="clr-namespace:WpfApplication14" 
Title="MainWindow" Height="350" Width="525"> 
<Window.Resources> 
    <app:MarginConverter x:Key="mc" /> 
</Window.Resources> 
<Grid> 
    <ScrollViewer HorizontalScrollBarVisibility="Auto" Name="ctlScroll"> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="100" /> 
       <ColumnDefinition Width="1*" /> 
      </Grid.ColumnDefinitions> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
       <RowDefinition Height="Auto" /> 
      </Grid.RowDefinitions> 
      <WrapPanel Grid.ColumnSpan="2" Grid.Column="0" Name="ctlWrap" Width="{Binding ViewportWidth, ElementName=ctlScroll}" MaxWidth="{Binding ViewportWidth, ElementName=ctlScroll}" Margin="{Binding HorizontalOffset, ElementName=ctlScroll, Converter={StaticResource mc}}" HorizontalAlignment="Left" /> 
      <TextBox Grid.Row="1" Grid.Column="1" Width="100" HorizontalAlignment="Left" Name="ctlText" /> 
      <StackPanel Grid.Row="2" Grid.Column="1" Orientation="Horizontal"> 
       <Button Click="Button_Click">Add Wrap</Button> 
       <Button Click="Button_Click_1">Remove Wrap</Button> 
       <Button Click="Button_Click_2">Add Text</Button> 
       <Button Click="Button_Click_3">Remove Text</Button> 
      </StackPanel> 
     </Grid> 
    </ScrollViewer> 
</Grid> 
</Window> 

여백 변환기는 here에서 왔습니다.

+0

ViewportWidth 바인딩을 사용하는 것이 좋습니다. 고마워. – johnDisplayClass

관련 문제