小编pol*_*ఠ_ఠ的帖子

WPF-如何在单击后隐藏下拉菜单

我的 WPF 窗口中有一个SplitButton,它是从 Xceed 的扩展 WPF 工具包借来的。它的下拉内容由一些 s 组成RadioButton。就像是:

<Window x:Class="WpfTest.Test3"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:tk="clr-namespace:Xceed.Wpf.Toolkit;assembly=Xceed.Wpf.Toolkit"
        Title="Test3" Height="300" Width="300">
    <Grid Height="25" Width="150">
        <tk:SplitButton Content="Default Command">
            <tk:SplitButton.DropDownContent>
                <StackPanel>
                    <RadioButton Content="Default Command" GroupName="variations" Margin="5" IsChecked="True"/>
                    <RadioButton Content="Alternate Command 1" GroupName="variations" Margin="5"/>
                    <RadioButton Content="Alternate Command 2" GroupName="variations" Margin="5"/>
                </StackPanel>
            </tk:SplitButton.DropDownContent>
        </tk:SplitButton>
    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

它会生成这样的东西:

测试

问题是,当我单击每个RadioButtons 时,下拉菜单不会消失。我做了一些谷歌搜索,意识到我应该为Click每个RadioButton. 但我不知道如何隐藏该事件处理程序中的下拉菜单。顺便说一句, a 似乎MenuItem 具有 的属性 StaysOpenOnClick,但其他控件没有这样的属性。

虽然以编程方式完成此操作就足够了,但是有 MVVM 方法吗?

c# wpf split-button drop-down-menu wpf-extended-toolkit

5
推荐指数
1
解决办法
3899
查看次数

类模板继承无法在GCC中编译,但在Visual Studio中有效

有人可以告诉我为什么以下代码在Visual Studio 2010中完美运行但无法在gcc 5.3中编译,尽管它似乎没有任何问题吗?我已经做了一些谷歌搜索但没有运气找到一个清晰和标准的方式来描述模板类继承.

#include <iostream>
#include <string>

namespace foobar
{
    template <typename Char_Type = char>
    class basic_foo
    {
    public:
        inline basic_foo(){}
        virtual ~basic_foo(){}

        typedef std::basic_string< Char_Type > str_foo;
        enum { fooEnum = 100 };
    };

    template <typename Char_Type = char>
    class basic_bar :private basic_foo <Char_Type>
    {
    public:
        basic_bar(){}
        ~basic_bar(){}

        str_foo bar1()
        {
            int i = fooEnum;
            return str_foo("test succeeded\n");
        }
    };
}

typedef foobar::basic_bar<> bar2;

int main()
{
    bar2 bar;
    std::cout << bar.bar1();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在visual studio中,它会导致:

test …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates

4
推荐指数
1
解决办法
273
查看次数

是否存在算术运算受编译器优化影响的情况?

这是一个普遍的问题,但由于我主要处理gcc/g ++/VStudio,我将其标记为c/c ++.当我搞乱优化选项时,我想到了这个问题.在最简单的形式中,考虑算术运算,如i / 6 * 8.如果一个人面对这个表达,他很可能将它简化为类似的东西i / 3 * 4.如果他更习惯乘以4,他将首先这样做,即(i * 4) / 3.我必须再次强调,这只是一个简单的例子.

那么编译器呢?他们是否有可能对此类操作采取相同措施?而且既然我们知道在上面的例子中,如果i是一个整数,那么简化和改变操作的顺序可能会导致完全不同的结果,问题可以改为:编译器是否完全避免了这样的动作?

如果我们希望程序完全按照我们的说法进行一些算术运算而不改变运算顺序,那么我们是否应该担心编译器的行为?

c c++ compilation compiler-optimization

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

在构造函数中调用静态方法

这对我来说有点奇怪.由于静态方法可以有一个类的实例,因此人们自然希望编译器不允许在构造函数中调用静态方法.但我已经用每个编译器测试了下面的代码,具有讽刺意味的是,它们都没有给我一个警告.虽然在执行时间内它们都会抛出异常.我在这里错过了什么吗?

#include <iostream>

class Foo
{
public:
    inline Foo()
    {
        std::cout << "testing: var = " << bar() - 1 << '\n';
    }
    ~Foo(){}

    static int bar()
    {
        Foo f;
        f.var = 10;
        return f.test();
    }
private:
    int var;
    int test()
    {
        return var + 1;
    }
};

int main()
{
    Foo foo;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

实例

c++ constructor static-methods

0
推荐指数
1
解决办法
2359
查看次数