Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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:将文本框放置在stackpanel中radiobutton旁边_C#_Wpf_Xaml_Radio Button - Fatal编程技术网

C# WPF:将文本框放置在stackpanel中radiobutton旁边

C# WPF:将文本框放置在stackpanel中radiobutton旁边,c#,wpf,xaml,radio-button,C#,Wpf,Xaml,Radio Button,我有一个stackpanel包含两个单选按钮(选项1和选项2)。如果用户选择选项2,则文本框应处于活动状态,允许用户提供有关选项2的更多详细信息 我提出了两个解决方案,但都不是我想要的。这就是它们的样子: 解决方案#1 解决方案#1的XAML代码非常简单,结果非常明显: 选择1 备选案文2: 一些文本详细说明了选项2 这里的好处是文本框使用整个宽度。然而,这不是我想要的,因为文本框应该放在选项2的旁边 解决方案#2 下一步是在RadioButton标签中创建网格。这允许我将文本框放置在正确

我有一个stackpanel包含两个单选按钮(选项1和选项2)。如果用户选择选项2,则文本框应处于活动状态,允许用户提供有关选项2的更多详细信息

我提出了两个解决方案,但都不是我想要的。这就是它们的样子:

解决方案#1 解决方案#1的XAML代码非常简单,结果非常明显:


选择1
备选案文2:
一些文本详细说明了选项2
这里的好处是文本框使用整个宽度。然而,这不是我想要的,因为文本框应该放在选项2的旁边

解决方案#2 下一步是在RadioButton标签中创建网格。这允许我将文本框放置在正确的位置,但宽度不再缩放到100%

代码如下所示:


选择1
备选案文2:
一些文本详细说明了选项2
除了在我看来这是一个过度设计的解决方案之外,还有一个问题:如何将单选按钮条目内的网格宽度设置为100%

这里也提出了类似的问题(),但使用
ItemContainerStyle
属性不适用于单选按钮


在我看来,一定有一个更容易(或至少是可行的)解决方案。有人能帮忙吗?

你可以尝试很多东西-

  • 将第二个单选按钮的水平对齐设置为“拉伸”
  • 尝试将其设置在网格上
  • 将ColumnDefinition设置为“Auto”并将另一个设置为“130*”没有任何意义。第一个在自动位置(将根据内容调整大小),第二个在“*”(使用所有可用空间)
  • *大小是相对的。如果你有1*和2*,2*永远是1*的两倍大。与0.5*和1*相同,第一个始终是1*大小的一半

    是否尝试将两个列定义都设置为自动

    另外,可以用来解决这类问题的方法是在元素周围应用边框(每个元素都有不同的边框颜色)。它有助于找出哪个控件是罪魁祸首。

    使用以下方法:

    <StackPanel Grid.Row="8"
                Grid.Column="1">
        <RadioButton>Option 1</RadioButton>
        <RadioButton HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
            <DockPanel  LastChildFill="True">
                <TextBlock >Option 2:</TextBlock>
                <TextBox Grid.Column="1"  
                         Margin="10,0,0,0">Some Text that </TextBox>
            </DockPanel>
        </RadioButton>
    </StackPanel>
    
    
    选择1
    备选案文2:
    一些文本
    
    或者,如果要保留网格,请执行以下操作:

     <StackPanel Grid.Row="8"
                Grid.Column="1">
        <RadioButton>Option 1</RadioButton>
        <RadioButton HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch">
            <Grid  HorizontalAlignment="Stretch">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock >Option 2:</TextBlock>
                <TextBox Grid.Column="1"  
                         Margin="10,0,0,0">Some Text that </TextBox>
            </Grid>
        </RadioButton>
    </StackPanel>
    
    
    选择1
    备选案文2:
    一些文本
    
    您可以随心所欲地设计。只需对所有单选按钮应用相同的
    GroupName

    <StackPanel>
        <RadioButton Content="Option1" GroupName="Question" />
        <StackPanel Orientation="Horizontal">
            <RadioButton Content="Option2" GroupName="Question" />
            <TextBox Text="Other controls"/>
        </StackPanel>
    </StackPanel>
    
    
    
    HorizontalAlignment还不够,他应该设置HorizontalContentAlignment您喜欢哪种解决方案?对我来说,网格解决方案更直观一些。你觉得怎么样?我更喜欢DockPanel。