Wpf 如何在Silverlight中为任何用户控件设置宽度绑定?

Wpf 如何在Silverlight中为任何用户控件设置宽度绑定?,wpf,silverlight,Wpf,Silverlight,在xaml中,可以将with设置为 <UserControl Width="100" /> 但它不起作用。宽度绑定应该设置哪种类型?我在WPF方面没有经验,但在silverlight中,宽度和高度值的类型是Double。但是,将它绑定到整数应该不会有问题,因为silverlight可以轻松处理这些事情。也许对您打算做什么和真正发生什么的描述,以及更详细的代码示例会有所帮助 编辑: 这就解释了一切。FrameworkElement的Width属性是双类型属性,但轴网柱的Width属性

在xaml中,可以将with设置为

<UserControl Width="100" />

但它不起作用。宽度绑定应该设置哪种类型?

我在WPF方面没有经验,但在silverlight中,宽度和高度值的类型是Double。但是,将它绑定到整数应该不会有问题,因为silverlight可以轻松处理这些事情。也许对您打算做什么和真正发生什么的描述,以及更详细的代码示例会有所帮助

编辑:

这就解释了一切。FrameworkElement的Width属性是双类型属性,但轴网柱的Width属性是不同的层。网格的列由ColumnDefinition对象的集合定义,其宽度属性是GridLength类型,而不是double,因为网格列宽可以采用文字数字值、自动值和星号值(*)。 然而,这只是好奇,因为columndefinition类不是从框架元素派生的,因此它的属性是不可绑定的。你想做的事根本不可能

如中所述,您可以在代码中完成。如果您坚持使用绑定,可以尝试以下解决方法:

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

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


希望这对您有所帮助。

我尝试的绑定适用于网格列定义,如:。将VM中的属性类型设置为int或double无效。这是一个很好的解决方案。谢谢。我知道这并不能回答您的问题,但我认为您根本不需要ViewModel中的宽度。ViewModel应该控制UI状态,但不应该了解UI布局。
public int mywidth {
  get {
      return 100;
  }
}
<Grid HorizontalAlignment="Stretch">
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition Width="*"/>
    </Grid.ColumnDefinitions>
    <Grid  Width="{Binding mywidth}" Grid.Column=1 >
</Grid>