0

プログラムの開始時に、画面の左側と画面の右側を非表示にできるようにしたいと考えています。

次に、ユーザーがcreate newボタンを押すと、画面の左側が使用可能になり、新しいアイテムを作成できます。その後、押すsaveと、中央のデータグリッドのみに戻ります。

次に、データグリッド行をダブルクリックしたときにイベントを追加したい (データはコード内のデータグリッドにプログラムされている) 画面の右側が表示され、ボタンallocateが押されると右側が再び消えます。データグリッド。

私はWPFにかなり慣れていないので、これができるかどうかはわかりません。私は自分の会社のプロトタイプを作成しているときに同じウィンドウでそれを実行しようとしていますが、すでに別のウィンドウを使用するものがあります。画像を投稿したのですが、新規ユーザーのため投稿できません。

4

1 に答える 1

1

コントロールを非表示および表示するには、エキスパンダーを使用するか (コメントで行ったように)、グリッドを使用し、必要に応じて可視性を設定することをお勧めします。サイド パネルをデータグリッド上に表示したい場合、それらを表示するには、それらの可視性を変更するだけです。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;
    }
}
于 2012-06-24T04:01:28.923 に答える