WPF绑定IValueConverter和另一个控件的宽度

时间:2011-01-23 23:22:34

标签: wpf binding width ivalueconverter


以下代码运行正常。代码中的其他地方出错。不过,给出的建议是好的。


我正在尝试将Width的{​​{1}}绑定到父控件的TextBox的百分比。我知道只需设置一个Width即可完成类似的工作,但我想知道为什么这不起作用。

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

IValueConverter

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

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

ivalueconverter看起来像这样:

<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>

设置width属性在此处不执行任何操作,更不用说设置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 } 了。我希望IValueConverter的宽度是父ScrollViewer的1/4。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:1)

将ScrollViewer的HorizontalAlignment设置为Stretch以外的其他内容。

此外,您应该绑定到ActualWidth property