다음 Silverlight 응용 프로그램에서 TextBlock이 OuterPadding의 값을 올바르게 표시하지만 OuterPadding 속성이 바깥 쪽 테두리의 채우기를 변경하지 않는 이유는 무엇입니까? 테두리 채우기를 간단한 정수로 변경하면 채우기가 올바르게 작동하지만 코드 뒤에 속성이 정의되어있는 경우에는 작동하지 않습니다.TextBlock에서 코드 숨김 속성 값을 표시 할 수 있지만 테두리/패딩에서 사용할 수없는 이유는 무엇입니까?
동일한 코드가 WPF에서 올바르게 작동합니다.
XAML :
<UserControl x:Class="Test222.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:pages="clr-namespace:Test222.Pages"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Width="600" Height="480">
<Border Background="#eee" Padding="{Binding OuterPadding}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="34"/>
<RowDefinition Height="426"/>
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Grid.Column="0">
<StackPanel x:Name="QuickMenu" Orientation="Horizontal"/>
</StackPanel>
<Border Grid.Row="1" Grid.Column="0"
Background="#fff"
Padding="10"
Width="580"
Height="426"
VerticalAlignment="Top"
CornerRadius="5">
<TextBlock Text="{Binding OuterPadding}"/>
</Border>
</Grid>
</Border>
</UserControl>
코드 뒤에 : 나는 그것의 두께에 대한 값 컨버터가 INT32을 처리하지 못하기 때문에 말할 것 추측이 있다면
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;
namespace Test222
{
public partial class MainPage : UserControl, INotifyPropertyChanged
{
#region ViewModelProperty: OuterPadding
private int _outerPadding;
public int OuterPadding
{
get
{
return _outerPadding;
}
set
{
_outerPadding = value;
OnPropertyChanged("OuterPadding");
}
}
#endregion
public MainPage()
{
InitializeComponent();
DataContext = this;
RefreshApplication();
}
void RefreshApplication()
{
OuterPadding = 5;
for (int i = 0; i < 5; i++)
{
var button = new Button();
button.Content = "Button " + i;
button.Margin = new Thickness { Right = 3 };
QuickMenu.Children.Add(button);
}
}
#region INotifyPropertyChanged Member
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
}
코드에서 int를 사용하면 WPF에서 작동하지만 Silverlight (3)에서는 분명히 작동하지 않습니다. 두께는 두 가지 모두에서 작용합니다. Silverlight에서 int의 코드를 사용하면 실제로 한 대의 컴퓨터에서 Visual Studio (2008)가 손상되었습니다. –