如何为Silverlight中的任何用户控件设置Width绑定?

时间:2013-08-14 18:14:56

标签: wpf silverlight

在xaml中,可以设置为

<UserControl Width="100" />

我想在VM中设置宽度并将其绑定到Xaml中的Width,如

<UserControl Width="{Binding mywidth}" />
在VM中

,将mywidth定义为整数,如

public int mywidth {
  get {
      return 100;
  }
}

但它不起作用。应该为宽度绑定设置什么类型的类型?

1 个答案:

答案 0 :(得分:0)

我没有WPF的经验,但在silverlight Width和Height值是Double类型。但是,你应该没有问题将它绑定到一个整数,因为silverlight可以很容易地处理这些事情。也许描述你打算做什么和真正发生什么,以及更详细的代码示例可能有所帮助。

修改

这解释了所有。 FrameworkElement的Width属性是Double类型属性,但grid列的width属性是一个不同的故事。网格的列由ColumnDefinition对象的集合定义,并且它们的width属性是GridLength类型,而不是double,因为网格列宽度可以采用文字数值,自动值和星值(*)。 但是,这仅仅是一种好奇心,因为columndefinition类不是从框架元素派生的,因此,它的属性并不是可绑定的。你想做什么根本不可能。

您可以在代码中执行此操作,如this question中所述。如果您坚持使用绑定,可以尝试以下解决方法:

<Grid HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid  Width="{Binding mywidth}" Grid.Column=1 >
</Grid>

将列定义为宽度auto,然后在该列中放置一个元素并将该元素宽度绑定到您的属性。宽度设置为“自动”的列具有其内容的宽度,因此您可以通过操纵这些内容宽度来操纵该列宽。

希望这会对你有所帮助。