wpf 代码隐藏中的重构属性名称不会传播到XAML文件

doinxwow  于 2022-11-26  发布在  其他
关注(0)|答案(1)|浏览(149)

我尝试在以下解决方案中将属性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设置?

wqsoz72f

wqsoz72f1#

这背后的原因似乎是ReSharper无法确定XAML标记中指定的属性名称是否引用了MainWindow类中定义的属性,* 如果DataContext属性是在代码隐藏中设置的 *。默认情况下,绑定引用控件的DataContext作为源。如果未检测到,松散标记和定义类型之间的链接丢失了。2我不知道这是ReSharper中的一个bug还是一个一般性的限制。
不过,有两个简单的解决方案可以解决这个问题:
1.将设计时数据上下文设置为定义此处属性MainWindow的类型。

<Window ...
        d:DataContext="{d:DesignInstance Type={x:Type local:MainWindow}}">

1.通过在XAML中绑定而不是代码隐藏来设置数据上下文。

<Window ...
        DataContext="{Binding RelativeSource={RelativeSource Self}}">

相关问题