Я использую отражение, чтобы установить значение свойства, но оно не работает! это потому, что цвет по умолчанию сбрасывается после! Это мой код:

MapWindow.xaml:

<Window x:Class="MapRepresentation.MapWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MapWindow" SizeToContent="WidthAndHeight">
    <Grid Width="640" Height="739">
        <Path x:Name="akkar" Data="..." HorizontalAlignment="Right" Height="124.318" Margin="0,6.482,82.619,0" Stretch="Fill" Stroke="Red" VerticalAlignment="Top" Width="211.881" /> 
    </Grid>
</Window>

MapWindow.Xaml.cs:

public Brush AkkarColor  
{  
    get { return this.akkar.Fill; }
    set { this.akkar.Fill = value; }
}

public void ChangeColor()
{  
    Type type = GetType();
    object obj = Activator.CreateInstance(type);
    PropertyInfo pathInfo = type.GetProperty("AkkarColor");
    pathInfo.SetValue(obj, System.Windows.Media.Brushes.Red, null);
}

private void akkar_MouseEnter(object sender, MouseEventArgs e)
{  
    ChangeColor();
}

Что случилось ? почему цвет дорожки Аккара не меняется?

0
Angela Beauty 28 Авг 2011 в 18:59

2 ответа

Лучший ответ

Это потому, что вы создаете новый экземпляр MapWindow. Передайте this в SetValue.

public void ChangeColor()  
{  
   Type type = GetType();  
    PropertyInfo pathInfo = type.GetProperty("AkkarColor");  
    pathInfo.SetValue(this, System.Windows.Media.Brushes.Red, null);  
}  
2
Daniel A. White 28 Авг 2011 в 15:02

Вы создаете новый экземпляр текущего типа, устанавливаете для него свойство, а затем игнорируете вновь созданный объект. Я подозреваю, что вы хотите изменить свойство объекта current , т.е.

// Remove the line declaring and initializing obj
pathInfo.SetValue(this, System.Windows.Media.Brushes.Red, null); 

Сказав это, совсем не ясно, зачем вы вообще используете отражение.

2
Jon Skeet 28 Авг 2011 в 15:03