c# - 重命名文件时重命名 XAML 文件类的更好方法?

标签 c# wpf xaml

编辑:重命名文件时的主要问题是重命名 xaml 内容

我的直觉告诉我有更好的方法可以做到这一点,但是以下方法有效,我的问题是看看是否有更好的或已经存在的方法可以做到这一点

我有一个小型 WPF 应用程序,可以加载 xaml 文件并可以导入/编辑和导出。 当 WPF 应用程序初始化时,它会生成一个可以编辑的占位符 xaml 文件, 导出时“StartingXamlFile.xaml”我使用了 SaveFileDialog,用户可以更改名称。但XAML文件的内容并不会根据文件名而改变。此外,当导入现有 XAML 文件然后编辑和导出(导出时更改名称)时,也会发生相同的情况。

解决方案:

我设置了一个 Singleton 对象来保存文件名 XamlFile 以及属性内容和路径。现在,导入时默认设置为“StartingXamlFile”,此值已被替换。这是按照 Gang of four Singleton technique 完成的

SaveFile 代码不起作用:

 SaveFileDialog dlg = new SaveFileDialog();
            dlg.FileName = "StartingXamlFile"; // Default file name
            dlg.DefaultExt = ".xaml"; // Default file extension
            dlg.Filter = "xaml files (*.xaml)|*.xaml|All files (*.*)|*.*"; // Filter files by extension

            // Show save file dialog box
            var result = dlg.ShowDialog();
            if (result == true)
            {
                File.WriteAllText(dlg.FileName, editedContent);
            }

保存使用替换有效的文件代码:

if (result == true)
            {
                var name = Path.GetFileNameWithoutExtension(dlg.FileName);
                var testing = XamlFile.Content.Replace(XamlFile.Path,name);
                File.WriteAllText(dlg.FileName, testing);
            }

最佳答案

只是为了给这个问题一个可接受的答案,除了:

SaveFileDialog dlg = new SaveFileDialog();
            dlg.FileName = "StartingXamlFile"; // Default file name
            dlg.DefaultExt = ".xaml"; // Default file extension
            dlg.Filter = "xaml files (*.xaml)|*.xaml|All files (*.*)|*.*"; 

            // Show save file dialog box
            var result = dlg.ShowDialog();
            if (result == true)
            {
        //X:Class replacement is done here
               var name = Path.GetFileNameWithoutExtension(dlg.FileName);
               var testing = XamlFile.Content.Replace(XamlFile.Path,name); 
               File.WriteAllText(dlg.FileName, testing);
            }

XamlFile 是一个包含 xaml 内容的单例对象 以及启动或导入时文件的初始名称,因此当您导出它时 替换所有对初始名称的引用

关于c# - 重命名文件时重命名 XAML 文件类的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47288571/

相关文章:

wpf - 无法绑定(bind)到我的 ViewModel 的集合

c# - 如何让标签文字自动滚动?

c# - 来自 Flex 客户端的 RSA 加密和来自 Web 服务的相应解密

c# - 在 Windows 窗体中托管 IDeskBand

c# - Json.NET 根据属性类型使属性成为必需的

ComboBox 中的 WPF 命令支持

c# - 在c#中加载xaml文件,获取具有指定名称的元素,添加按钮并保存文件

WPF绑定(bind): How to avoid "property not found" runtime errors at design time

c# - 为什么 Setter 属性不适用于超链接?

c# - Prism View 定位器 : How to fix "Your views must implement IView"