2015-11-19 46 views
0

我想知道是否有一种方法可以不调整网格的宽度和高度,但是如果我的图形变为特定的宽度/高度,相应的scrollviewer出现,是否有可能在XAML中做,还是我需要在代码后面做这个?所以,我希望我的控制有宽度,如果窗口得到下面这些话,我希望能够使滚动的观众,我有当窗口大小减小时,滚动条或滚动查看器

XAML

<ScrollViewer x:Name="MyScrollViewer" VerticalScrollBarVisibility="Disabled" HorizontalScrollBarVisibility="Disabled"> 
    <Grid Background="White" x:Name="OuterGrid"> 

     <Grid.RowDefinitions> 
      <RowDefinition Height="70"/> 
      <RowDefinition Height="*"/> 
     </Grid.RowDefinitions> 

     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 

<Grid Background="White" Grid.Row="1" x:Name="UIWindow" Grid.ColumnSpan="2"> 

      <Grid.RowDefinitions> 
       <RowDefinition/> 
       <RowDefinition/> 
       <RowDefinition/> 
       <RowDefinition/> 
       <RowDefinition/> 
       <RowDefinition/> 
      </Grid.RowDefinitions> 

      <Grid.ColumnDefinitions> 
       <ColumnDefinition Width="*"/> 
       <ColumnDefinition Width="1.2*"/> 
       <ColumnDefinition Width="1.2*"/> 
       <ColumnDefinition Width="1.5*"/> 
       <ColumnDefinition Width="1.5*"/> 
      </Grid.ColumnDefinitions> 

<TextBlock HorizontalAlignment="Left" Margin="25,3,0,2" Height="17" VerticalAlignment="Top" Width="70" Text="Facies" Grid.Column="0" Grid.Row="0" FontFamily="{StaticResource FontFamily}"/> 
      <Path Data="M2.4,62 L103.4,62" HorizontalAlignment="Left" Height="1" Margin="5,20,0,0" Stretch="Fill" Stroke="#A8A8A8" VerticalAlignment="Top" Width="200" Grid.Column="0" Grid.Row="0"/> 
      <Controls:FaciesControl x:Name="FaciesFilter" HorizontalAlignment="Left" Margin="10,25,0,0" VerticalAlignment="Top" Height="300" Width="195" Grid.Row="0" Grid.Column="0" Grid.RowSpan="3"/> 

      <TextBlock Grid.Column="0" Grid.Row="2" Text="Zone Legend:" Width="150" Height="15" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10" FontFamily="{StaticResource FontFamily}"/> 
      <Path Data="M2.4,62 L103.4,62" HorizontalAlignment="Left" Height="1" Margin="5,27,0,0" Stretch="Fill" Stroke="#A8A8A8" VerticalAlignment="Top" Width="200" Grid.Column="0" Grid.Row="2"/> 
      <Controls:LegendControl x:Name="LegendFilter" HorizontalAlignment="Left" Height="450" Margin="5,50,0,0" Grid.Row="2" Grid.Column="0" VerticalAlignment="Top" Width="224" Grid.RowSpan="4"/> 

      <TextBlock Text="Sequence Stratigraphy" FontFamily="{StaticResource FontFamily}" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="5,5,0,0" Grid.Column="1" Grid.Row="0"/> 
      <Path Data="M2.4,62 L103.4,62" HorizontalAlignment="Left" Height="1" Margin="5,20,0,0" Stretch="Fill" Stroke="#A8A8A8" VerticalAlignment="Top" Width="355" Grid.Column="1" Grid.Row="0"/> 
      <Stratigraphy:StratiGraphControl x:Name="stratiGraphControl" Grid.Row="0" Grid.Column="1" Grid.RowSpan="4" Margin="0,40,40,10"/> 
+0

您有'FrameworkElement'的属性,如'MaxWidth''MaxHeight' [FrameworkElement.MaxWidth](https://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.maxwidth%28v=vs。 110%29.aspx) – kirotab

+0

是的,但如果我在更大的屏幕上有应用程序,那么如果它在更大的屏幕上显示,当屏幕最大化时,它会看起来很小,当它最大化时,控件是完美的,只是当我缩小尺寸时的窗口 –

+0

所以我看到你的控件没有响应,而且它们的值已经设置好了,你只是想在窗口尺寸变小时显示/隐藏ScrollViewer?如果这是正确的两个选项想到1.绑定到您的主容器的实际宽度,并使用转换器将滚动查看器的可见性设置为适当的值。 2.使用窗口的'SizeChanged'事件并在你的代码中设置适当的可见性到'ScrollViewer'。第二个选项更容易,我不确定第一个选项是否可以工作(我认为我有一些与'ActualWidth'有关的问题,它没有触发它的更改处理程序) – kirotab

回答

1

当您在意见中的要求的第二种方法的例子。这只是做滚动查看器的逻辑,所以我不知道这是否足够你的情况,但这是你所要求的,所以这里是:

这段代码将隐藏/显示垂直/水平滚动条,如果窗口大小低于/上面给出的值

XAML - 把这个在你的窗前

SizeChanged="Window_SizeChanged"  

代码

private void Window_SizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    if(e.NewSize.Width <= 500) 
    { 
     MyScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Visible; 
    } 
    else 
    { 
     MyScrollViewer.HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled; 
    } 
    if (e.NewSize.Height <= 500) 
    { 
     MyScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible; 
    } 
    else 
    { 
     MyScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Disabled; 
    } 
} 
背后
+0

非常感谢:) –

+0

没问题。顺便说一句,也许你必须在第一次启动时添加相同的逻辑,这意味着如果调整大小不会触发并且用户在小屏幕中启动应用程序,则它将不会显示滚动条,直到用户现在调整大小。 – kirotab