Why can't I bind Grid.RowDefinition Height in Silverlight?

When I run the following Silverlight application, it gives me an error :

AG_E_PARSER_BAD_PROPERTY_VALUE [Line: 12 Position: 35]

I tried the same code in WPF and it runs fine , i.e. the middle grid row resizes correctly based on the associated value.

What do I need to change in this code to avoid this error in Silverlight?

XAML:

<UserControl x:Class="TestRowHeight222.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480"> <Grid x:Name="LayoutRoot"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="30"/> <RowDefinition Height="{Binding ContentHeight}"/> <RowDefinition Height="30"/> </Grid.RowDefinitions> <StackPanel Grid.Row="0" Background="Tan"> <TextBlock Text="row0" /> </StackPanel> <StackPanel Grid.Row="1" Background="Beige" Orientation="Horizontal"> <TextBlock Text="The height should be: "/> <TextBlock Text="{Binding ContentHeight}"/> </StackPanel> <StackPanel Grid.Row="2" Background="Tan"> <TextBlock Text="row2"/> </StackPanel> </Grid> </UserControl> 

Code for:

 using System.Windows.Controls; using System.ComponentModel; namespace TestRowHeight222 { public partial class MainPage : UserControl, INotifyPropertyChanged { #region ViewModelProperty: ContentHeight private int _contentHeight; public int ContentHeight { get { return _contentHeight; } set { _contentHeight = value; OnPropertyChanged("ContentHeight"); } } #endregion public MainPage() { InitializeComponent(); DataContext = this; ContentHeight = 50; } #region INotifiedProperty Block public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } #endregion } } 
+4
source share
1 answer

This is as close as possible, I do not know if this is suitable for your situation.

 <Grid x:Name="LayoutRoot"> <Grid.ColumnDefinitions> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="30"/> <RowDefinition Height="Auto" /> <RowDefinition Height="30"/> </Grid.RowDefinitions> <StackPanel Grid.Row="0" Background="Tan"> <TextBlock Text="row0" /> </StackPanel> <Grid Grid.Row="1" Height="{Binding ContentHeight}"> <StackPanel Background="Beige" Orientation="Horizontal"> <TextBlock Text="The height should be: "/> <TextBlock Text="{Binding ContentHeight}"/> </StackPanel> </Grid> <StackPanel Grid.Row="2" Background="Tan"> <TextBlock Text="row2"/> </StackPanel> </Grid> 

Also change the ContentHeight property to double.

+4
source

Source: https://habr.com/ru/post/1303558/


All Articles