簡體   English   中英

用戶控件中文本框的裝訂邊距

[英]Binding margin of a textbox in Usercontrol

我想通過在datagrid中使用帶有隨機邊距的usercontrol添加一堆文本框。

為此,我嘗試在用戶控件中綁定邊距並將其添加到主窗口中,但問題是在其中一些邊距相同之后更改了邊距。

我應該如何正確綁定呢?

UserControl XAML:

<UserControl x:Class="WpfApplication23.UserControl1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:WpfApplication23"
         mc:Ignorable="d" >

<Grid>
    <TextBox x:Name="textBox" Background="Red" HorizontalAlignment="Left" Height="20" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="300" Margin="{Binding TextBoxMargin, Mode=TwoWay}"/>

</Grid>

UserControl C#:

    public partial class UserControl1 : UserControl
{
    public Thickness TextBoxMargin { get; set; }

    public UserControl1()
    {
        InitializeComponent();
    }

}

}

MainWindow XAML:

<Window x:Class="WpfApplication23.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:WpfApplication23"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="500">
<Grid>

    <DataGrid AutoGenerateColumns="False"
            x:Name="dataGrid"
            IsReadOnly="True"
            CanUserAddRows="False"
            CanUserDeleteRows="False"
            >
        <DataGrid.Resources>
            <DataGridTemplateColumn x:Key="TemplateColumn" Header="Usercontrol">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <local:UserControl1/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Resources>
        <DataGrid.Columns >
            <DataGridTemplateColumn >
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

MainWindows C#:

    public partial class MainWindow : Window
{
    UserControl1[] UV = new UserControl1[101];
    UserControl1[] AB = new UserControl1[101];

    public MainWindow()
    {
        InitializeComponent();
        AA();
    }
    private void AA()
    {
        DataGridTemplateColumn templateColumn =
          (DataGridTemplateColumn)dataGrid.Resources["TemplateColumn"];
        dataGrid.Columns.Add(templateColumn);
        for (int i = 0; i <= 100; i++)
        {
            UV[i] = new UserControl1();

            Random len = new Random();

            UV[i].TextBoxMargin = new Thickness
                (
                     len.Next(0, 50), len.Next(0, 0), len.Next(0, 50), len.Next(0, 0)
                );
            UV[i].textBox.Margin = UV[i].TextBoxMargin;

            dataGrid.Items.Add(UV[i]);
        }
    }
}

只有在運行您的代碼后,我才能了解您的問題。 您的問題是隨機函數。

您需要保留一個Random實例,並在同一實例上繼續使用Next。 因此,您要做的就是在for循環之外獲取新的隨機數。

  private void AA()
    {
        DataGridTemplateColumn templateColumn =
          (DataGridTemplateColumn)dataGrid.Resources["TemplateColumn"];
        dataGrid.Columns.Add(templateColumn);
        Random len = new Random();
        for (int i = 0; i <= 100; i++)
        {
            UV[i] = new UserControl1();

            UV[i].TextBoxMargin = new Thickness
                (
                     len.Next(0, 50), len.Next(0, 0), len.Next(0, 50), len.Next(0, 0)
                );
            UV[i].textBox.Margin = UV[i].TextBoxMargin;

            dataGrid.Items.Add(UV[i]);
        }
    }

您可以在以下文章中了解有關此問題的更多信息: 隨機數生成器僅生成一個隨機數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM