Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.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# WPF运动元问题_C#_Wpf_Button_Resize - Fatal编程技术网

C# WPF运动元问题

C# WPF运动元问题,c#,wpf,button,resize,C#,Wpf,Button,Resize,我可能在做一个非常简单的问题,但这就是我现在的想法: 我有几个按钮和一个列表框,用户可以在其中进行选择和交互。我的应用程序还根据应用程序的宽度/高度移动这些元素,如下所示: listBox1.Margin=新厚度(this.ActualWidth*0.84,this.ActualHeight*0.3,0,0) 在窗口模式下,我可以选择列表框中的项目,并适当地单击按钮,但当我开始将应用程序拉大时,我尝试单击项目,但我无法这样做。。这是因为我还需要更新他们的命中检测矩形吗?或者可能是我移动的项目不正

我可能在做一个非常简单的问题,但这就是我现在的想法:

我有几个按钮和一个列表框,用户可以在其中进行选择和交互。我的应用程序还根据应用程序的宽度/高度移动这些元素,如下所示:

listBox1.Margin=新厚度(this.ActualWidth*0.84,this.ActualHeight*0.3,0,0)


在窗口模式下,我可以选择列表框中的项目,并适当地单击按钮,但当我开始将应用程序拉大时,我尝试单击项目,但我无法这样做。。这是因为我还需要更新他们的命中检测矩形吗?或者可能是我移动的项目不正确?我不知所措。。在这一点上,任何信息都会非常有用…谢谢

不确定调整大小后为什么不能再单击项目。这可能有很多原因。显然,您希望在列表框周围有成比例的边距。通常情况下,您可以使用网格:

<Grid>
  <Grid.ColumnDefinitions>
     <ColumnDefinition Width="0.83*"/>
     <ColumnDefinition/>
  </Grid.ColumnDefinitions>
  <Grid.RowDefinitions>
     <RowDefinition Height="0.3*"/>
     <RowDefinition/>
  </Grid.RowDefinitions>
  <ListBox x:Name="listBox1" Grid.Column="1" Grid.Row="1"/>
</Grid>

我写这个XAML:

<Window x:Class="StackOverflow_MovingProblem.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <ListBox Name="listbox1" ItemsSource="{Binding Path=list}" />
        <StackPanel Grid.Row="1" Orientation="Horizontal">
            <Button Content="button1" />
            <Button Content="button2" />
            <Button Content="button3" />
        </StackPanel>
    </Grid>
</Window>

使用此代码:

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DataContext = this;

            SizeChanged += new SizeChangedEventHandler(MainWindow_SizeChanged);

            list = new ObservableCollection<string>();
            list.Add("item1");
            list.Add("item2");
            list.Add("item3");
        }

        public ObservableCollection<string> list { get; set; }

        void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
        {
            listbox1.Margin = new Thickness(this.ActualWidth * 0.84,
                                            this.ActualHeight * 0.3, 0, 0);
        }
    }
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
DataContext=this;
SizeChanged+=新的SizeChangedEventHandler(主窗口\u SizeChanged);
列表=新的ObservableCollection();
列表。添加(“第1项”);
列表。添加(“第2项”);
列表。添加(“第3项”);
}
公共ObservableCollection列表{get;set;}
void主窗口\u SizeChanged(对象发送方,SizeChangedEventArgs e)
{
listbox1.边距=新厚度(此实际宽度为*0.84,
这是实际高度*0.3,0,0);
}
}

但我无法重现你的问题。检查我的代码,如果你的代码有什么不同,告诉我是什么,这样我可以给你一些建议。谢谢

当应用程序“移动这些元素”时,预期的行为是什么?我不明白你为什么要改变列表框的边距厚度。也许您正在查找.Width属性?此应用程序的预期行为是,我有一个带有按钮和列表框的屏幕,当我调整应用程序窗口的大小时,按钮和列表框会根据窗口的大小相应地移动。列表框和按钮的实际位置会移动。我已经通过前面的代码实现了这一点,但是在移动它们之后,就不可能再选择列表框中的任何内容,也不可能再选择按钮。。我认为这些项目的命中检测没有根据它们的新位置进行更新,所以我尝试了手动更新功能,但没有成功…是的,你是对的,我只是希望列表框根据应用程序窗口的宽度/高度在x/y方向移动,并且仍然具有其类的功能(即列表框/按钮)例如,当我缩放窗口时,我希望列表框的位置为窗口宽度的30%。因此我说listbox.Margin.Left=app.ActualWidth*0.30;我已经成功了,但是当我缩放应用程序窗口并尝试使用按钮/列表框时,它们的功能会退化。我失去了在列表框中选择项目的能力,按钮会被点击d检测矩形似乎是..“关闭”。嗯,代码看起来不错..让我继续比较并测试更多..我会与您联系..我使用您的设置尝试了它,但尝试以下:新厚度(this.ActualWidth*0.411,this.ActualHeight*0.435,0,0);当我使用你的设置时,它可以正常工作,但是在这些设置下,你可能会看到问题。哦,对我来说,应用程序窗口的高度和宽度是:高度=768,宽度=1024