2010-01-28 2 views
2

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

    } 
} 

답변

2

int는 xaml에서 값을 정의 할 때 작동하지만 코드에서 수행 할 때는 작동하지 않습니다. 하지만 int에서 ThickNess로 속성을 변경하면 잘 작동합니다.

+0

코드에서 int를 사용하면 WPF에서 작동하지만 Silverlight (3)에서는 분명히 작동하지 않습니다. 두께는 두 가지 모두에서 작용합니다. Silverlight에서 int의 코드를 사용하면 실제로 한 대의 컴퓨터에서 Visual Studio (2008)가 손상되었습니다. –

1

-> 두께 변환. int가 아닌 OuterPadding을 두께로 만들면 어떻게됩니까?

EDIT 그냥 리플렉터를 확인했는데 ThicknessConverter는 Int32가 아니라 String이나 Double에서 Thickness 로의 변환을 처리하기 위해 하드 코딩 된 것처럼 보입니다.

나는 반사경에서 본 것을 오해했습니다. Int32를 처리해야하는 것처럼 보입니다.

관련 문제