GVKun编程网logo

c# – 如何以编程方式向WPF ContextMenu添加访问密钥(快捷方式)?(c# wpf教程)

16

如果您对c#–如何以编程方式向WPFContextMenu添加访问密钥(快捷方式)?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于c#–如何以编程方式向WPFContext

如果您对c# – 如何以编程方式向WPF ContextMenu添加访问密钥(快捷方式)?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于c# – 如何以编程方式向WPF ContextMenu添加访问密钥(快捷方式)?的详细内容,我们还将为您解答c# wpf教程的相关问题,并且为您提供关于android – 如何以编程方式在线性布局中添加2 textview、c# – 如何以编程方式将UAC的consent.exe带到前台?、c# – 如何以编程方式将内容添加到contentPlaceHolder?、cocoa – 如何以编程方式阅读Mac .textClipping文件?的有价值信息。

本文目录一览:

c# – 如何以编程方式向WPF ContextMenu添加访问密钥(快捷方式)?(c# wpf教程)

c# – 如何以编程方式向WPF ContextMenu添加访问密钥(快捷方式)?(c# wpf教程)

我已经有以下内容:

var myContextMenu = new System.Windows.Controls.ContextMenu();

var exitItem = new MenuItem();
exitItem.Header = "E_xit";
exitItem.Item.Click += new RoutedEventHandler(new System.EventHandler(ExitProgram));
myContextMenu.Items.Add(exitItem);

这会导致我的上下文菜单显示Exit菜单项,带有带下划线的“x”.但是,按x不会做任何事情.单击菜单项工作正常.

如何将事件与x键关联?请注意,这必须在我的上下文中以编程方式完成.我不能在前面的XAML中编写这个解决方案.

解决方法

添加快捷方式的常用方法如下:

var exitCommand = new RelayCommand(_ => ExitProgram());
        var exitItem = new MenuItem(); 
        exitItem.Header = "E_xit";
        exitItem.Command = exitCommand;
        myContextMenu.Items.Add(exitItem);

        InputBindings.Add(new KeyBinding(exitCommand,new KeyGesture(Key.X,ModifierKeys.Alt));

RelayCommand
这里使用的类不是WPF的一部分,但它广泛用于基于MVVM的应用程序.

但请注意,您无法在没有修改器的情况下将快捷方式设置为X.
引自MSDN

In most cases,a KeyGesture must be associated with one or more
ModifierKeys. The exceptions to this rule are the function keys and
the numeric keypad keys,which can be a valid KeyGesture by
themselves. For example,you can create a KeyGesture by using only the
F12 key,but to use the X key in a KeyGesture it must be paired with a
modifier key.

如果由于某种原因你需要使用X w / o修饰符 – 你将不得不处理键盘事件(例如KeyDown)并做出相应的反应

android – 如何以编程方式在线性布局中添加2 textview

android – 如何以编程方式在线性布局中添加2 textview

嗨,大家好,

我从API获得以下字段“Name”和“Skoda”.会有x个这样的项目.根据设计,我应该在下图中显示它们.

所以,我决定以编程方式在名为“childLayout”的线性布局中创建两个textview,如下所示.

-- RelativeLayout

  -- Linear Layout
        -- TextView  Textview --
  -- Linear Layout 

  -- Linear Layout
        -- TextView  Textview --
  -- Linear Layout      

  -- Linear Layout
        -- TextView  Textview --
  -- Linear Layout 

--RelativeLayout

但我没有得到理想的输出.请帮我解决这个问题.

这是代码:

TextView mType;
TextView mValue;        
for (int i = 0; i < getDetailedDescAL.size(); i++) {

    LinearLayout childLayout = new LinearLayout(
            DetailedCategories.this);

    LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
    childLayout.setLayoutParams(linearParams);

    mType = new TextView(DetailedCategories.this);
    mValue = new TextView(DetailedCategories.this);

    mType.setLayoutParams(new TableLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT,1f));
    mValue.setLayoutParams(new TableLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT,1f));

    mType.setTextSize(17);
    mType.setPadding(5,3,3);
    mType.setTypeface(Typeface.DEFAULT_BOLD);
    mType.setGravity(Gravity.LEFT | Gravity.CENTER);

    mValue.setTextSize(16);
    mValue.setPadding(5,3);
    mValue.setTypeface(null,Typeface.ITALIC);
    mValue.setGravity(Gravity.LEFT | Gravity.CENTER);

    mType.setText(getDetailedDescAL.get(i).getmPropertyType());
    mValue.setText(getDetailedDescAL.get(i).getmPropertyValue());

    childLayout.addView(mValue,0);
    childLayout.addView(mType,0);

    RelativeLayout.LayoutParams relativeParams = 
        new RelativeLayout.LayoutParams(
            LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT);
    relativeParams.addRule(RelativeLayout.BELOW);
    Details.addView(childLayout,relativeParams);

    // Details is the relative layout declared in XML

}

输出是:

文本视图似乎是最重要的.怎么解决这个问题.

最佳答案
替换LinearLayout的RelativeLayout并将所有TextView添加到其中.
不要忘记LinearLayout中的android:orientation =“vertical”

c# – 如何以编程方式将UAC的consent.exe带到前台?

c# – 如何以编程方式将UAC的consent.exe带到前台?

如何(如果可能的话)将Vista / Win7 UAC同意对话框置于前台,当它在任务栏中最小化时?

例如,请考虑以下情形:
我的应用程序在启动期间检查更新,它下载新的更新文件并通过在Process.StartInfo中提供管理员密码来执行它,之后我的应用程序关闭.

此时,如果用户或Windows本身设法从MSI安装程序窗口失去焦点(可能通过单击桌面或其他窗口),UAC会看到安装程序窗口不是前台窗口,因此会弹出一个闪烁的同意对话框.任务栏.

一些不那么明亮的客户不明白我的应用程序尚未完成更新并尝试重新启动应用程序.在这个阶段,我可以枚举正在运行的进程,并找到任务栏中闪烁的consent.exe.

问题是我无法把它带到前台.我试图用user32.dll从不同的参数调用ShowWindow()(恢复,显示,正常),但没有任何反应.我确实检查了MainWindowHandle进程,看起来没问题(它不是零或负数).我猜测问题出在UAC为同意对话框(安全桌面)创建不同的桌面会话.

如果用户可以单击任务栏中的闪烁图标以将同意对话框带到前台,那么还应该可以通过代码模拟这个吗?

PS!我正在使用C#

解决方法

你试过 SetForegroundWindow吗?此外,在本机win32中没有任何称为主窗口,一个进程可以有0或任何数量的“主窗口”,但在consent.exe的情况下,我猜它只有一个…

编辑:

BOOL CALLBACK EnumWindowsProc(HWND hwnd,LParaM lParam) 
{
    char buf[50];
    *buf=0;
    GetClassName(hwnd,buf,50);
    buf[sizeof("$$$Secure UAP")-1]=0;
    if (!lstrcmp("$$$Secure UAP",buf)) 
    {
        SwitchToThisWindow(hwnd,true);
    }
    return true;
}
...
EnumWindows(EnumWindowsProc,0);

这将切换到安全桌面,但我不建议使用此,因为:

>它使用未记录的$$$Secure UAP …窗口类
>使用SwitchToThisWindow是邪恶的,你不应该在用户不想要时切换焦点
>如果多个UAC确认对话框处于活动状态,则无法确定要切换到哪个consent.exe

问题是同意窗口不是拥有的弹出窗口,如果是,你可以确定你得到了正确的HWND.希望Win8将获得同意,作为一个拥有弹出窗口,甚至更好的模式对话框.

c# – 如何以编程方式将内容添加到contentPlaceHolder?

c# – 如何以编程方式将内容添加到contentPlaceHolder?

我有一个母版页,我的所有页面都继承了它.
对于格式化,我想在ContentPlaceHolder中放置不同页面的内容.

现在,我怎么能插入一切呢?由于我打算用数据库中的东西填充ContentPlaceHolder,我想我必须以编程方式进行填充.

>如何向ContentPlace Holder添加控件?
我检查了其他answers,但我无法通过其ID访问它.
>我应该从开始使用多个ContentPlaceHolders吗?假设我想放电影.如果只有一个包含所有图像,描述和评级,每个东西都要有一个ContentPlaceHolder吗?

我对其他解决方案持开放态度,因为我没有使用ASP的经验.

解决方法

老问题……但是我刚刚遇到了这个问题,这是第一篇关于谷歌的帖子,所以我想补充一下,因为其他人在我的案例中没有用.

这是我在常规< asp:内容不起作用时的做法(虽然在正常使用中,答案@JayC是你如何做的): MasterPage有这个ContentPlaceHolder:

<asp:ContentPlaceHolder ID="ScriptsPlace" runat="server"></asp:ContentPlaceHolder>

必须从用户控件动态添加一些JavaScript.尝试直接使用ContentPlaceHolder会出现此错误:

Parser Error Message: Content controls have to be top-level controls
in a content page or a nested master page that references a master
page.

所以我想从代码隐藏中添加脚本.这是.ascx文件的页面加载:

protected void Page_Load(object sender,EventArgs e)
{
    ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder;
    if (c != null)
    {
        LiteralControl l = new LiteralControl();
        l.Text="<script type=\"text/javascript\">$(document).ready(function () {js stuff;});</script>";
        c.Controls.Add(l);
    }
}

更新:事实证明我必须在比预期更多的地方使用它,并最终使用更灵活/可读的方式.在用户控件本身,我只是包装了javascript以及需要使用常规div移动的任何其他内容.

<div id="_jsDiv" runat="server">
    $(document).ready(function() {
         //js stuff
    });
    Other server controls or HTML junk
</div>

然后后面的代码将找到div,然后将其移动到ContentPlaceHolder中.

protected void Page_Load(object sender,EventArgs e)
{
    ContentPlaceHolder c = Page.Master.FindControl("ScriptsPlace") as ContentPlaceHolder;
    HtmlGenericCOntrol jsDiv = this.FindControl("_jsDiv") as HtmlGenericControl;
    if (c != null && jsDiv != null)
    {
        c.Controls.Add(jsDiv);
    }
}

我实际上把这个代码放在一个自定义用户控件中,我只是让我的常规用户控件继承自定义用户控件,所以一旦我用一个< div id =“_ jsDiv”runat =“server”&gt包装javascript / etc ;,自定义用户控件负责其余部分,我不必在用户控件的代码后面做任何事情.

cocoa – 如何以编程方式阅读Mac .textClipping文件?

cocoa – 如何以编程方式阅读Mac .textClipping文件?

每当您将文本选择拖动到Finder时,都会创建这些文件.文件大小始终为0字节.显然,数据存储在资源分支中.

我尝试读取资源fork [1],但得到错误代码-39(文件结束).

这里有一些关于该文件的更多细节:

$>xattr  test.textClipping 
com.apple.FinderInfo
com.apple.ResourceFork

[1] http://www.cocoadev.com/index.pl?UsingResourceForks

解决方法

查找FSOpenFork和FSReadFork.
(Apple有一个名为 AudioCDSample的代码示例).

还有一个可以读取这些文件的命令行工具(/usr/bin/DeRez),您可能希望在GDB下查看它,但是从我看到的它使用了弃用的API(即FSRead代替FSReadFork) ).

今天的关于c# – 如何以编程方式向WPF ContextMenu添加访问密钥(快捷方式)?c# wpf教程的分享已经结束,谢谢您的关注,如果想了解更多关于android – 如何以编程方式在线性布局中添加2 textview、c# – 如何以编程方式将UAC的consent.exe带到前台?、c# – 如何以编程方式将内容添加到contentPlaceHolder?、cocoa – 如何以编程方式阅读Mac .textClipping文件?的相关知识,请在本站进行查询。

本文标签: