我尝试在以下解决方案中将属性MyText
重构为新名称HerText
:
MainWindow.xaml.cs
的名称
using System.Windows;
namespace resharper_refactoring_xaml
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
MyText = "Blabla";
DataContext = this;
}
public string MyText { get; set; }
}
}
MainWindow.Xaml
的名称
<Window x:Class="resharper_refactoring_xaml.MainWindow"
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"
xmlns:local="clr-namespace:resharper_refactoring_xaml"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<TextBlock Text="{Binding Path=MyText}"></TextBlock>
</Grid>
</Window>
我右键单击该属性并选择 * 重构此属性〉重命名 *。然后我为该属性键入一个新名称,点击 * 下一步 *。
不幸的是,只有代码隐藏中的MyText
引用被重命名。XAML文件中的MyText
引用被完整地重命名。
根据this question,Resharper应该能够将重构传播到XAML文件。
为什么重命名没有传播到XAML文件?是否有某种我可能忽略了的Resharper设置?
1条答案
按热度按时间wqsoz72f1#
这背后的原因似乎是ReSharper无法确定XAML标记中指定的属性名称是否引用了
MainWindow
类中定义的属性,* 如果DataContext
属性是在代码隐藏中设置的 *。默认情况下,绑定引用控件的DataContext
作为源。如果未检测到,松散标记和定义类型之间的链接丢失了。2我不知道这是ReSharper中的一个bug还是一个一般性的限制。不过,有两个简单的解决方案可以解决这个问题:
1.将设计时数据上下文设置为定义此处属性
MainWindow
的类型。1.通过在XAML中绑定而不是代码隐藏来设置数据上下文。