Я использую отражение, чтобы установить значение свойства, но оно не работает! это потому, что цвет по умолчанию сбрасывается после! Это мой код:
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();
}
Что случилось ? почему цвет дорожки Аккара не меняется?
2 ответа
Это потому, что вы создаете новый экземпляр MapWindow
. Передайте this
в SetValue
.
public void ChangeColor()
{
Type type = GetType();
PropertyInfo pathInfo = type.GetProperty("AkkarColor");
pathInfo.SetValue(this, System.Windows.Media.Brushes.Red, null);
}
Вы создаете новый экземпляр текущего типа, устанавливаете для него свойство, а затем игнорируете вновь созданный объект. Я подозреваю, что вы хотите изменить свойство объекта current , т.е.
// Remove the line declaring and initializing obj
pathInfo.SetValue(this, System.Windows.Media.Brushes.Red, null);
Сказав это, совсем не ясно, зачем вы вообще используете отражение.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.