WPF 使用Uri读取文件

Dear200892 2020-04-10 10:22:33

最近在学习WPF自定义控件,想能够读取某个路径下的XAML文件

框架里的Layout我后面会生成dll文件,Demo是我的测试程序。
Demo的bin文件夹我打算存放各类型的资源文件。

现在我想使用 Application.LoadComponent(uri)读取资源文件。
问题是方法里的URI是相对路径,我配置的总是找不到路径下的资源文件。
求教大神!!!
...全文
846 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dear200892 2020-04-14
  • 打赏
  • 举报
回复
引用 18 楼 轻箬笠 的回复:
最近在学WPF,有点头大,市场需求好少,但是公司项目需要。
上手还好
轻箬笠 2020-04-14
  • 打赏
  • 举报
回复
最近在学WPF,有点头大,市场需求好少,但是公司项目需要。
Dear200892 2020-04-14
  • 打赏
  • 举报
回复
引用 20 楼 z792623428 的回复:
我也遇到类似的问题,先mark一下~
目前还没有找到用相对路径读取bin文件夹里的资源文件
desperaso 2020-04-13
  • 打赏
  • 举报
回复
另,微信等在电脑上,输入框回车也是其他功能的
desperaso 2020-04-13
  • 打赏
  • 举报
回复
引用 15 楼 Dear200892 的回复:
聊天气泡这个软件我之前下载过,我觉得文本框应该能够换行,输入表情,光标还是在文字后面

换行是因为把回车屏蔽掉了,去掉即可,屏蔽还有粘贴功能。光标移动代码注销了,上面有/**/部分,需要就加上了
Dear200892 2020-04-13
  • 打赏
  • 举报
回复
引用 14 楼 desperaso 的回复:
可能思路不一样吧,希望能帮到你。 做个控件,写个cs文件就完事,比如 https://blog.csdn.net/desperaso/article/details/105340757 组件添加功能也就一些函数,比如 修改richtextbox的 https://blog.csdn.net/desperaso/article/details/105482979 修改textbox的 https://blog.csdn.net/desperaso/article/details/105364805 样式什么的上面说过了。 参考,希望能帮到
聊天气泡这个软件我之前下载过,我觉得文本框应该能够换行,输入表情,光标还是在文字后面
desperaso 2020-04-13
  • 打赏
  • 举报
回复
可能思路不一样吧,希望能帮到你。
做个控件,写个cs文件就完事,比如
https://blog.csdn.net/desperaso/article/details/105340757
组件添加功能也就一些函数,比如
修改richtextbox的 https://blog.csdn.net/desperaso/article/details/105482979
修改textbox的 https://blog.csdn.net/desperaso/article/details/105364805
样式什么的上面说过了。
参考,希望能帮到
Dear200892 2020-04-13
  • 打赏
  • 举报
回复
引用 9 楼 exception92 的回复:
相对路径不需要带有component前缀,直接定位到包含文件的文件夹,前提文件已被生成并复制到相应文件夹。另一种是文件作为资源调用,嵌入到exe中的资源。可以查一下区分
bin文件下的资源文件可以用相对路径?
desperaso 2020-04-13
  • 打赏
  • 举报
回复
接上面,我是这么搞的https://blog.csdn.net/desperaso/article/details/105457489
desperaso 2020-04-13
  • 打赏
  • 举报
回复
引用 10 楼 Dear200892 的回复:
你的这个方法能找到bin文件夹下的资源文件?

放哪里不都一样么,只要拖到方案里面,把bin文件夹拖到工程方案里面。
如果外部调用,就是xaml明码文件和exe文件在一起给用户,就读取本地,csdn上有,搜一下
Dear200892 2020-04-13
  • 打赏
  • 举报
回复
引用 8 楼 desperaso 的回复:
接上面,调用 Style myStyle = (Style)this.FindResource("for_scrollviewer"); // 里面的key值 组件.Style = myStyle;
你的这个方法能找到bin文件夹下的资源文件?
  • 打赏
  • 举报
回复
相对路径不需要带有component前缀,直接定位到包含文件的文件夹,前提文件已被生成并复制到相应文件夹。另一种是文件作为资源调用,嵌入到exe中的资源。可以查一下区分
desperaso 2020-04-11
  • 打赏
  • 举报
回复
接上面,调用
Style myStyle = (Style)this.FindResource("for_scrollviewer"); // 里面的key值
组件.Style = myStyle;
desperaso 2020-04-11
  • 打赏
  • 举报
回复
引用 6 楼 Dear200892 的回复:
我的核心是如何写出相对路径



好吧,这样的么
var foo = new Uri("pack://application:,,,/Style/ScrollViewer.xaml", UriKind.RelativeOrAbsolute);
Application.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = foo });
desperaso 2020-04-10
  • 打赏
  • 举报
回复
接上面,路径啥的不是问题。读取的xaml,是个什么东西,组件还是模板还是style什么的,改改public object XamlToObj(string xaml)用这个吧
desperaso 2020-04-10
  • 打赏
  • 举报
回复
uri -- pack://application:,,,。。。。。。。。。。

文件
把文件拖到工程里
app.xaml
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="/路径/xxxxxxxxx.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>


或者...... 读文件的忘了baidu查下,读string的
public object XamlToObj(string xaml)
{
string strXaml = xaml;
StringReader strreader = new StringReader(strXaml);
XmlTextReader xmlreader = new XmlTextReader(strreader);
object obj = XamlReader.Load(xmlreader);
return obj;
}
Dear200892 2020-04-10
  • 打赏
  • 举报
回复
引用 2 楼 杀马特丶蛮牛 的回复:
System.Environment.CurrentDirectory机上你的相对路径
uri只能读取相对路径,不然没办法读取
杀马特丶蛮牛 2020-04-10
  • 打赏
  • 举报
回复
System.Environment.CurrentDirectory机上你的相对路径
Dear200892 2020-04-10
  • 打赏
  • 举报
回复
引用 5 楼 desperaso 的回复:
接上面,路径啥的不是问题。读取的xaml,是个什么东西,组件还是模板还是style什么的,改改public object XamlToObj(string xaml)用这个吧
我的核心是如何写出相对路径

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧