2012-06-22 5 views
0

Я хочу, чтобы у меня с левой стороны экрана и правой стороны экрана в начале программы я мог скрыть левую сторону экрана.Динамическое изменение ширины окна WPF, когда контент становится видимым.

Затем, когда пользователь нажимает , создайте новую кнопку, появится левая сторона экрана, чтобы они могли создать новый элемент. Затем, когда они нажимают , сохранить, он возвращается только к среднему набору данных.

Тогда я хочу, чтобы добавить событие, когда двойной щелчок на DataGrid строке (данные программируется на DataGrid в коде) правая часть экрана становится видимым, то при нажатии на кнопку выделить правая сторона снова исчезает, просто выходя из datagrid.

Я довольно новичок в WPF, поэтому не знаю, можно ли это сделать или нет. Я пытаюсь сделать это в том же окне в тот момент, когда я создаю прототипы для своей компании и уже имею некоторые, которые используют отдельные окна. Я опубликовал изображение, но не могу его опубликовать, поскольку я новый пользователь.

+0

Вы хотите изменить размер окна или скрыть/показать элементы управления в существующем окне (например, Visual Studio, рушится стекла)? –

+0

hide/show контролирует их, поэтому, когда они нажимают кнопку, отображается другая часть. коллапсирующие стекла, не слышали о них, я посмотрю и посмотрю :) – TeamGB

+0

Ive теперь использовал расширители, чтобы скрыть элементы управления и уменьшить размер окна, чтобы отображать только среднюю часть. Теперь я хочу, чтобы окно расширило окно, чтобы соответствовать другим элементам управления, когда расширители открыты. – TeamGB

ответ

1

Чтобы скрыть и отобразить элементы управления, я бы либо рекомендовал использовать расширители (по мере того, как ваш комментарий говорит, что вы сделали), либо сетки, и установив их видимость по мере необходимости. Если вы хотите, чтобы ваши боковые панели отображались поверх datagrid, тогда их отображение - это просто вопрос изменения их видимости. Если вы не хотите скрывать DataGrid, вам нужно будет изменить видимость панелей, а также размер окна.

XAML:

<Window x:Class="WpfApplication1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow"> 
<Grid> 
    <!-- DataGrid display --> 
    <Grid> 
     <StackPanel> 
      <Button Content="Add New" Click="OnAddNewButtonClick" Width="100"/> 
      <DataGrid ItemsSource="{Binding GridItems}" IsReadOnly="True" Name="dataGrid"> 
       <DataGrid.RowStyle> 
        <Style TargetType="{x:Type DataGridRow}"> 
         <EventSetter Event="MouseDoubleClick" Handler="OnRowDoubleClick"/> 
        </Style> 
       </DataGrid.RowStyle> 
      </DataGrid> 
     </StackPanel> 
    </Grid> 

    <!-- Left column pops up over DataGrid --> 
    <Grid Name="LeftColumn" Visibility="Collapsed" Background="Red" Width="200" HorizontalAlignment="Left"> 
     <StackPanel VerticalAlignment="Center"> 
      <Button Content="Hide Column" Click="OnLeftColumnButtonClick"/> 
     </StackPanel> 
    </Grid> 

    <!-- Right Column expands screen size--> 
    <Grid Visibility="Collapsed" Name="RightColumn" Width="200" HorizontalAlignment="Right"> 
     <StackPanel Background="Green" > 
      <TextBlock Text="Hidden Column"/> 
      <Button Content="Hide Panel" Click="OnRightColumnButtonClick"/> 
     </StackPanel> 
    </Grid> 
</Grid> 
</Window 

C# - Я знаю, что вы работаете в VB, но это было быстрее для меня. Код должен быть достаточно понятны, но если вам нужен образец VB, дайте мне знать:

public partial class MainWindow : Window 
{ 
    public ObservableCollection<Person> GridItems { get; set; } 
    private const double CollapsedWidth = 500; 
    private const double ExpandedWidth = 700; 

    public MainWindow() 
    { 
     DataContext = this; 
     GridItems = new ObservableCollection<Person>(); 
     GridItems.Add(new Person { Name = "Foo", Age = 1 }); 
     GridItems.Add(new Person { Name = "Bar", Age = 2 }); 
     InitializeComponent(); 
     Width = CollapsedWidth; 

    } 

    private void OnAddNewButtonClick(object sender, RoutedEventArgs e) 
    { 
     LeftColumn.Visibility = Visibility.Visible; 
    } 

    private void OnLeftColumnButtonClick(object sender, RoutedEventArgs e) 
    { 
     LeftColumn.Visibility = Visibility.Collapsed; 
    } 

    private void OnRowDoubleClick(object sender, MouseButtonEventArgs e) 
    { 
     Width = ExpandedWidth; 
     RightColumn.Visibility = Visibility.Visible; 
    } 

    private void OnRightColumnButtonClick(object sender, RoutedEventArgs e) 
    { 
     RightColumn.Visibility = Visibility.Collapsed; 
     Width = CollapsedWidth; 
    } 
} 
+0

В следующий раз я попробую. Я не знал, что сетки имели свойство рухнуть. На днях мне удалось сделать другой, но похожий способ. С расширителями я изменил размер окна, так что только средний бит был виден. Затем, когда они были расширены, окно выросло, и элементы управления внутри (большинство найденных внутри сеток или групповых ящиков) были расположены на экране, поэтому они выглядели так, будто они все еще были посередине. Поскольку wpf вы не можете растянуть налево, я должен был перейти вправо и переместить. Он работал хорошо, хотя не самый эффективный способ сделать это – TeamGB

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