2015-11-19 4 views
0

Я хочу знать, есть ли способ не изменять ширину и высоту сетки, которые у меня есть, но когда я уменьшаю размер окна, если мой график становится определенной шириной/высотой, тогда появится соответствующий scrollviewer, возможно ли это сделать в XAML или мне нужно сделать это в коде? Поэтому я хочу, чтобы мои управления, чтобы иметь ширину, и если окно становится ниже их, то я хочу, чтобы иметь возможность позволить зрителям прокрутки, что у меня естьScrollbar или ScrollViewer при уменьшении размеров окон

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. Привяжите фактическую ширину основного контейнера и используйте конвертер, чтобы установить видимость вашего scrollviewer в соответствующее значение. 2. Используйте событие «SizeChanged» в окне и в вашем коде, чтобы установить соответствующую видимость в 'ScrollViewer'. Второй вариант проще, и я не уверен, что первый из них будет работать (я думаю, что у меня были некоторые проблемы с 'ActualWidth', не стреляющим в измененный обработчик) – kirotab

ответ

1

Как вы просили в комментариях пример для второго подхода. Это всего лишь логика scrollviewer, поэтому я не знаю, достаточно ли этого в вашем случае, но это то, о чем вы просите, так вот:

Этот код скроет/покажет вертикальную/горизонтальную полосу прокрутки, если размер окна ниже/выше заданных значений

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

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