Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在UWP中以编程方式绑定列宽?_C#_Xaml_Data Binding_Uwp_Programmatically Created - Fatal编程技术网

C# 在UWP中以编程方式绑定列宽?

C# 在UWP中以编程方式绑定列宽?,c#,xaml,data-binding,uwp,programmatically-created,C#,Xaml,Data Binding,Uwp,Programmatically Created,我正在尝试创建用户可以在运行时调整大小的列,就像在excel中一样。但是,我正在动态创建字段,不知道如何将编程创建的列的宽度绑定到在xaml中创建的列的宽度 问题:如何以编程方式而不是在XAML中绑定列宽 政务司司长: XAML: 如何以编程方式而不是在XAML中绑定列宽 您可以在不使用绑定的情况下订阅每个文本块的SizeChanged事件,当您调整列的大小时,将触发SizeChanged事件,然后您可以更改在代码隐藏中创建的列的宽度。您可以将在xaml中创建的ColumnDefinitio

我正在尝试创建用户可以在运行时调整大小的列,就像在excel中一样。但是,我正在动态创建字段,不知道如何将编程创建的列的宽度绑定到在xaml中创建的列的宽度

问题:如何以编程方式而不是在XAML中绑定列宽

政务司司长:

XAML:


如何以编程方式而不是在XAML中绑定列宽

您可以在不使用绑定的情况下订阅每个文本块的SizeChanged事件,当您调整列的大小时,将触发SizeChanged事件,然后您可以更改在代码隐藏中创建的列的宽度。您可以将在xaml中创建的ColumnDefinition的实际宽度设置为在代码隐藏中创建的ColumnDefinition的宽度。例如:

.xaml:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" x:Name="WepNumColumn" x:DefaultBindMode="OneWay"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" x:Name="typeColumn"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" x:Name="DistanceColumn"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" x:Name="DirectionColumn"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" x:Name="FlipColumn"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>

        <controls:GridSplitter x:Name="MySplitter" Grid.Column="1">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
    </controls:GridSplitter>
    <controls:GridSplitter Grid.Column="3">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
    </controls:GridSplitter>
    <controls:GridSplitter Grid.Column="5">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
    </controls:GridSplitter>
    <controls:GridSplitter Grid.Column="7">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
    </controls:GridSplitter>

    <Button x:Name="addWepButton" 
            Content="+" 
            FontSize="30"  
            Grid.Column="10"
            Grid.Row="0"
            Click="AddWepButton_Click" />
        <TextBlock Text="WEP #" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="0"
               Grid.Row="0" 
               x:Name="WEPTextBlock" 
              />
        <TextBlock Text="Type" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="2" x:Name="TypeTextBlock" 
               Grid.Row="0" 
               />
        <TextBlock Text="Distance" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="4" x:Name="DistanceTextBlock" 
               Grid.Row="0"  
              />
        <TextBlock Text="Direction" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="6" x:Name="DirectionTextBlock" 
               Grid.Row="0"  
               />
        <TextBlock Text="Flip" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="8" x:Name="FlipTextBlock" 
               Grid.Row="0"  
               />

    <ScrollViewer Grid.Row="1" Grid.ColumnSpan="20">
            <StackPanel x:Name="WepStackPanel">
            </StackPanel>
    </ScrollViewer>
</Grid>
此外,XAML控件可以在运行时调整列的大小,您可以直接使用它来创建表格式

<Page NavigationCacheMode="Required"
    x:Class="WASP.WepPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:WASP"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">


    <Page.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="PoleDictionary.xaml" />
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Page.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
         <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" x:Name="WepNumColumn" x:DefaultBindMode="OneWay"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="Auto" />
            </Grid.ColumnDefinitions>
    
    <!-- HERE IS WHERE I ADDED GRID SPLITTERS SO THE USERS CAN EDIT COLUMN WIDTH
    THIS IS WHAT I WANT THE WIDTH OF THE OTHER COLUMNS BOUND TO-->
    
        <controls:GridSplitter Grid.Column="1">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
        </controls:GridSplitter>
        <controls:GridSplitter Grid.Column="3">
            <controls:GridSplitter.RenderTransform>
                <TranslateTransform X="-8" />
            </controls:GridSplitter.RenderTransform>
        </controls:GridSplitter>
        <controls:GridSplitter Grid.Column="5">
            <controls:GridSplitter.RenderTransform>
                <TranslateTransform X="-8" />
            </controls:GridSplitter.RenderTransform>
        </controls:GridSplitter>
        <controls:GridSplitter Grid.Column="7">
            <controls:GridSplitter.RenderTransform>
                <TranslateTransform X="-8" />
            </controls:GridSplitter.RenderTransform>
        </controls:GridSplitter>

        <Button x:Name="addWepButton" 
                Content="+" 
                FontSize="30"  
                Grid.Column="10"
                Grid.Row="0"
                Click="AddWepButton_Click" />
        <TextBlock Text="WEP #"
                   Grid.Column="0"
                   Grid.Row="0" 
                   Style="{StaticResource WepTextBlock}"/>
        <TextBlock Text="Type"
                   Grid.Column="2"
                   Grid.Row="0" 
                   Style="{StaticResource WepTextBlock}"/>
        <TextBlock Text="Distance"
                   Grid.Column="4"
                   Grid.Row="0"  
                   Style="{StaticResource WepTextBlock}"/>
        <TextBlock Text="Direction"
                   Grid.Column="6"
                   Grid.Row="0"  
                   Style="{StaticResource WepTextBlock}"/>
        <TextBlock Text="Flip"
                   Grid.Column="8"
                   Grid.Row="0"  
                   Style="{StaticResource WepTextBlock}"/>

        <ScrollViewer Grid.Row="1" Grid.ColumnSpan="20">
            <StackPanel x:Name="WepStackPanel">
                
            </StackPanel>
        </ScrollViewer>
    </Grid>
</Page>
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="200" x:Name="WepNumColumn" x:DefaultBindMode="OneWay"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" x:Name="typeColumn"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" x:Name="DistanceColumn"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" x:Name="DirectionColumn"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" x:Name="FlipColumn"/>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>

        <controls:GridSplitter x:Name="MySplitter" Grid.Column="1">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
    </controls:GridSplitter>
    <controls:GridSplitter Grid.Column="3">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
    </controls:GridSplitter>
    <controls:GridSplitter Grid.Column="5">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
    </controls:GridSplitter>
    <controls:GridSplitter Grid.Column="7">
        <controls:GridSplitter.RenderTransform>
            <TranslateTransform X="-8" />
        </controls:GridSplitter.RenderTransform>
    </controls:GridSplitter>

    <Button x:Name="addWepButton" 
            Content="+" 
            FontSize="30"  
            Grid.Column="10"
            Grid.Row="0"
            Click="AddWepButton_Click" />
        <TextBlock Text="WEP #" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="0"
               Grid.Row="0" 
               x:Name="WEPTextBlock" 
              />
        <TextBlock Text="Type" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="2" x:Name="TypeTextBlock" 
               Grid.Row="0" 
               />
        <TextBlock Text="Distance" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="4" x:Name="DistanceTextBlock" 
               Grid.Row="0"  
              />
        <TextBlock Text="Direction" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="6" x:Name="DirectionTextBlock" 
               Grid.Row="0"  
               />
        <TextBlock Text="Flip" SizeChanged="WEPTextBlock_SizeChanged"
               Grid.Column="8" x:Name="FlipTextBlock" 
               Grid.Row="0"  
               />

    <ScrollViewer Grid.Row="1" Grid.ColumnSpan="20">
            <StackPanel x:Name="WepStackPanel">
            </StackPanel>
    </ScrollViewer>
</Grid>
private void addWepStack()
{
   ......
    ColumnDefinition col0 = new ColumnDefinition();
    ColumnDefinition col1 = new ColumnDefinition();
    ColumnDefinition col2 = new ColumnDefinition();
    ColumnDefinition col3 = new ColumnDefinition();
    ColumnDefinition col4 = new ColumnDefinition();
        
    // Set the width of each column
    col0.Width = new GridLength(WepNumColumn.ActualWidth);
    col1.Width = new GridLength(typeColumn.ActualWidth);
    col2.Width = new GridLength(DistanceColumn.ActualWidth);
    col3.Width = new GridLength(DirectionColumn.ActualWidth);
    col4.Width = new GridLength(FlipColumn.ActualWidth);
    ......
}


private void WEPTextBlock_SizeChanged(object sender, SizeChangedEventArgs e)
{
    if (grid != null)
    {
        grid.ColumnDefinitions[0].Width = new GridLength(WepNumColumn.ActualWidth);
        grid.ColumnDefinitions[1].Width = new GridLength(typeColumn.ActualWidth);
        grid.ColumnDefinitions[2].Width = new GridLength(DistanceColumn.ActualWidth);
        grid.ColumnDefinitions[3].Width = new GridLength(DirectionColumn.ActualWidth);
        grid.ColumnDefinitions[4].Width = new GridLength(FlipColumn.ActualWidth);
    }
}