小编Edw*_*uay的帖子

如何在我的WPF应用程序中弹出MessageBox.Show()?

我有一个700w x 300h的WPF应用程序,可以将它拖到我的大屏幕上的任何地方.

我的应用程序执行时:

MessageBox.Show("Sorry, this function is not yet implemented.");
Run Code Online (Sandbox Code Playgroud)

消息框出现在我的屏幕中间,甚至可能在应用程序本身附近.

如何让我的MessageBox出现在我的应用程序中间?

wpf

21
推荐指数
3
解决办法
3万
查看次数

为什么按钮点击事件"冒泡视觉树"到StackPanel,如MSDN文章所述?

在MSDN文章" 了解WPF中的路由事件和命令"中,它说明了这一点

事件将从源元素向上冒泡(传播)可视树,直到它被处理或到达根元素.

但是,在此示例中,当您单击按钮时,它不会"冒泡可视树"以由父StackPanel事件处理,即单击按钮不会触发任何事件.

为什么不?如果不是这样的话,他们是什么意思"冒泡"

XAML:

<Window x:Class="TestClickEvents456.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <StackPanel x:Name="TheStackPanel"
                Background="Yellow"
                MouseDown="TheStackPanel_MouseDown">
        <Button x:Name="TheButton"
                Margin="10"
                Content="Click This"/>
        <TextBlock x:Name="TheMessage"
                   Text="Click the button or the yellow area"/>
    </StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)

后台代码:

using System.Windows;
using System.Windows.Input;

namespace TestClickEvents456
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void TheStackPanel_MouseDown(object sender, MouseButtonEventArgs e)
        {
            TheMessage.Text = "StackPanel was clicked.";
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

c# wpf event-routing

21
推荐指数
3
解决办法
2万
查看次数

什么是WPF最好的自由时间选择器?

我正在为WPF 寻找一个简单的时间选择器控件.

  • 我发现找到了这个:

http://marlongrech.wordpress.com/2007/11/18/time-picker/

但它有一些问题,例如你不能输入"00",第二个零不会出现.

  • Silverlight似乎有一个:

http://jesseliberty.com/2009/03/28/toolkit-control-%E2%80%93-timepicker/

但它不适用于WPF.

  • WPF工具包本身有一个DatePicker而不是TimePicker.或者有没有办法允许用户在WPFToolkit DatePicker中输入时间和日期?它在SelectedDate中返回 DateTime但我没有看到如何允许用户也使用此控件选择时间.

什么是最好的免费WPF控件,允许用户以HH:MM:SS格式输入时间?

c# wpf datetimepicker timepicker

21
推荐指数
3
解决办法
5万
查看次数

在vim中,除了最后100行之外,如何删除文件中的所有行?

在vim当我的光标在第一行时,我可以按:

100dd

删除前100行.

但我怎么删除所有线,除了最后 100行?

vim

20
推荐指数
3
解决办法
1万
查看次数

如何从多行TextBox中将字符串拆分为List <string>,将'\n\r'添加为行结尾?

我的XAML文件中有一个文本框:

<TextBox 
             VerticalScrollBarVisibility="Visible" 
             AcceptsReturn="True" 
             Width="400" 
             Height="100" 
             Margin="0 0 0 10" 
             Text="{Binding ItemTypeDefinitionScript}"
             HorizontalAlignment="Left"/>
Run Code Online (Sandbox Code Playgroud)

我得到一个字符串,我发送给CreateTable(string)它反过来调用CreateTable(List<string>).

public override void CreateTable(string itemTypeDefinitionScript)
{
    CreateTable(itemTypeDefinitionScript.Split(Environment.NewLine.ToCharArray()).ToList<string>());
}

public override void CreateTable(List<string> itemTypeDefinitionArray)
{
    Console.WriteLine("test: " + String.Join("|", itemTypeDefinitionArray.ToArray()));
}
Run Code Online (Sandbox Code Playgroud)

问题是字符串显然在每一行的末尾都有'\n\r',所以Split('\n')只得到其中一个,就像Split('\ r')一样,并使用Environment.Newline.ToCharArray ()当我输入这个:

one
two
three
Run Code Online (Sandbox Code Playgroud)

产生这个:

one||two||three
Run Code Online (Sandbox Code Playgroud)

但我当然想要它产生这个:

one|two|three
Run Code Online (Sandbox Code Playgroud)

什么是单行简单地将带有' \n\r'结尾的字符串解析为List<string>

c# arrays string

20
推荐指数
4
解决办法
4万
查看次数

如何强制继承类在C#中实现静态方法?

我想要做的就是确保Item的子类实现静态方法,并且我希望在编译时检查它以避免运行时错误.

使用静态方法的抽象类似乎不起作用:

错误:无法将静态成员标记为覆盖,虚拟或抽象

public abstract class Item
{
    public static abstract Item GetHistoricalItem(int id, DateTime pastDateTime);
}

public class Customer : Item
{
    public static override Customer GetHistoricalItem(int id, DateTime pastDateTime)
    {
        return new Customer();
    }
}

public class Address : Item
{
    public static override Address GetHistoricalItem(int id, DateTime pastDateTime)
    {
        return new Address();
    }
}
Run Code Online (Sandbox Code Playgroud)

和接口似乎也不起作用:

错误:客户未实现接口成员GetHistoricalItem()

public class Customer : Item, HistoricalItem
{
    public static Customer GetHistoricalItem(int id, DateTime pastDateTime)
    { …
Run Code Online (Sandbox Code Playgroud)

c# methods static interface abstract

20
推荐指数
3
解决办法
1万
查看次数

如何在WPF FrameworkElement上捕获单击和双击事件?

我可以像这样在TextBlock上单击一下:

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    MessageBox.Show("you single-clicked");
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样双击 TextBlock:

private void TextBlock_MouseDown(object sender, MouseButtonEventArgs e)
{
    if (e.LeftButton == MouseButtonState.Pressed)
    {
        if (e.ClickCount == 2)
        {
            MessageBox.Show("you double-clicked");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是如何在单个TextBlock上捕获它们并区分它们?

c# wpf double-click event-handling

20
推荐指数
2
解决办法
3万
查看次数

为什么XAML Margin不遵循CSS规范?

在CSS中,保证金顺序是:右上角左下角

在XAML中,保证金顺序为:左上方左下方

有没有理由为什么WPF团队没有将这与CSS规范对齐?

wpf xaml margin

19
推荐指数
2
解决办法
2413
查看次数

此列表是否正确理解了Microsoft当前的应用程序部署选项?

我试图了解Microsoft目前提供的许多应用程序部署选项.

做了一些研究,发现了数十个令人困惑的术语:

  • "WPF App"
  • "ClickOnce App"
  • "WPF ClickOnce App"
  • "MSI App"
  • "XBAP App"
  • "使用ClickOnce部署的XBAP应用程序"
  • "已安装的ClickOnce应用程序"
  • "WPF Web App"
  • "ASP.NET Web App"
  • "ASP.NET MVC Web App"
  • "Silverlight App"
  • "完整的WPF应用程序"
  • "具有同步框架支持的ClickOnce"

我将我的发现清理成以下七种不同的方法.希望得到反馈:

  1. "使用MSI部署WPF应用程序"(允许大量安装选项)

    • 目标计算机上需要MSI运行时
    • 带选项的向导
    • 可以指定每用户或每台机器
    • 可以修改目标计算机上的文件和注册表,仅受管理员设置的访问权限的限制
    • 可以在桌面上放置快捷方式
    • 替换系统文件等使得在目标计算机上轻松进入DLL地狱
    • 更新是一个很大的负面因素:检测可用更新需要额外的工具/自定义编程,而不是内置的
    • 用户不必在线使用应用程序
  2. "使用ClickOnce部署的WPF应用程序":(如果您想要自动更新但在沙箱中运行,则很好)

    • 需要两次单击(单击超链接,单击是),无需用户输入
    • 仅适用于当前用户,不适用于每台机器的安装
    • 桌面上没有快捷方式
    • 出现在程序列表中,如正常应用程序
    • 应用程序文件始终复制到../My Documents/My Applications
    • 应用程序的快捷方式将放在"开始"菜单/公司名称中
    • 无法修改目标计算机,与操作系统隔离
    • 自动检测并更新较新版本
    • 简单地将它们放在网络服务器上(客户端检测并获取它们)
    • 需要.NET 2.0或更高版本
    • 与Java Web Start相当
    • 解决了四个问题:(1)易于部署,(2)易于更新,(3)对目标计算机影响小,(4)无需管理员权限.
    • 被认为是"低影响"
    • 如果两个用户在同一台​​计算机上安装了相同的ClickOnce应用程序,则它们不会相互破坏
    • 使用CAS来保证安全
    • 用户不必在线使用应用程序
    • 独立的ClickOnce应用程序现在不能在Firefox和Mac上使用Firefox,因为它需要.NET运行时
    • 限制为单窗口应用程序,因为它们在浏览器中运行
    • 构建ClickOnce清单比Silverlight等更容易,因为IDE几乎可以为您完成所有这些操作; 你只需要在某处托管文件(可以是一个网址;可以是一个网络UNC).
  3. "XBAP App":.xbap文件的xcopy部署,IE和Firefox会立即显示为网页

    • XBAP模型的真正目标是创建一个等同于传统HTML和JavaScript网站(或Flash applet)的WPF
    • 目标计算机只需运行应用程序而无需通过Web浏览器(IE或Firefox)在Web上安装
    • 它们适用于需要非常简单部署的Intranet应用程序,完整的.NET Framework(与Silverlight相对)和浏览器的导航模型.
    • 99%的WPF功能(与Silverlight的WPF功能子集相对)
    • 也可以通过ClickOnce自动部署,但XCOPY更常见
    • YourApp.xbap实际上是ClickOnce部署清单
    • 在沙箱中运行
    • 用户必须在线才能使用应用程序
    • 这些必须是"基于页面"的应用程序,而不是"基于Windows"的应用程序
    • "XBAP似乎只是因为它在浏览器窗口中显示所有内容而在brwoser中运行.这与ActiveX控件(和Silverlight)使用的模型不同,后者在浏览器进程中加载​​."
    • XBAP提供"快速免费"体验,只要安装了.NET …

silverlight wpf xbap

18
推荐指数
1
解决办法
2392
查看次数

您是否知道使用MVVM的任何真实的,有用的WPF/Silverlight应用程序?

我正在寻找完整应用程序的代码,这些应用程序(1)使用MVVM模式,(2)可用于WPF/Silverlight/MVVM初学者.到目前为止我只发现:

  • Crack.NET - 运行时调试和脚本编写工具(有用但非常复杂)
  • CipherText - WPF密码管理器(完美但用VB.NET编写)

还有什么其他的?

优选地使用MVVM但具有完整感觉的较小辅助应用程序或工具,可能具有WPF/Silverlight图形/动画优点等,其不仅显示正在使用的MVVM概念,而且显示在现实世界的已完成应用程序的上下文中

我的贡献

感谢所有提示,我收集了15个MVVM代码示例列表,并在此处发布:

WPF/Silverlight代码示例概述,可帮助您学习MVVM.

silverlight wpf mvvm

18
推荐指数
1
解决办法
3834
查看次数