0

以下代码工作正常。代码的其他地方有错误。不过,给出的建议还是不错的。


我正在尝试将Widtha绑定到父控件TextBox的百分比。Width我知道我可以通过简单地设置 a 来完成类似的事情Margin,但我想知道为什么这不起作用。

首先,我IValueConverter在用户控件的资源集合中设置了对 an 的引用:

<UserControl.Resources>
    <local:TextBoxWidthConverter x:Key="txtWidthConv" />
</UserControl.Resources>

在主要的 xaml 中,我有以下内容:

<StackPanel Name="parentPanel" Width="300">
  <ScrollViewer HorizontalScrollBarVisibility="Auto"    
       VerticalScrollBarVisibility="Hidden" Name="scroller" Width="{Binding Width,    
       ElementName=parentPanel, Converter={StaticResource txtWidthConv}}">           
     <StackPanel Orientation="Horizontal">
       <TextBox></TextBox>
     </StackPanel>
   </ScrollViewer>
</StackPanel>

ivalueconverter 如下所示:

public class TextBoxWidthConverter : IValueConverter
{

    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        double result = (double)value;

        if (!Double.IsNaN(result))
        {
            result = result * .25;
        }
        else
        {
            result = 100D;
        }

        return result;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new System.NotImplementedException("Not implemented.");
    }

    #endregion
}

设置 width 属性在这里没有任何作用,更不用说设置IValueConverter. 我希望ScrollViewer是 parent 宽度的 1/4 StackPanel

4

2 回答 2

2

将 ScrollViewer 设置HorizontalAlignmentStretch.

此外,您应该绑定到ActualWidth属性

于 2011-01-23T23:25:20.337 回答
2

让布局系统为您工作,而不是与之抗争。Grid 将自动处理相对大小:

<StackPanel Name="parentPanel" Width="300">
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition />
      <ColumnDefinition Width="3*" />
    </Grid.ColumnDefinitions>

    <ScrollViewer HorizontalScrollBarVisibility="Auto"    
       VerticalScrollBarVisibility="Hidden" Name="scroller">           
      <StackPanel Orientation="Horizontal">
        <TextBox></TextBox>
      </StackPanel>
    </ScrollViewer>
  </Grid>
</StackPanel>
于 2011-01-23T23:47:44.523 回答