小编nab*_*lke的帖子

枚举上的datatrigger来改变图像

我有一个带有固定背景图像的按钮,并希望在它上面显示一个小的叠加图像.要选择哪个叠加图像取决于LapCounterPingStatus相应视图模型的依赖项属性().

这是我到目前为止所得到的:

<Button>
    <Grid>
        <Image Stretch="None"> <!-- Background Image -->
            <Image.Style>
                <Style TargetType="{x:Type Image}">
                    <Setter Property="Source" Value="/Images/Pingn.png"/>
                </Style>
            </Image.Style>
        </Image>
        <Image Stretch="None" Panel.ZIndex="1"> <!-- Small Overlay Image -->
            <Image.Style>
                <Style TargetType="{x:Type Image}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_UNKNOWN">
                            <Setter Property="Source" Value="/Images/RefreshOverlayn.png"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_FAILURE">
                            <Setter Property="Source" Value="/Images/ErrorOverlayn.png"/>
                        </DataTrigger>
                        <DataTrigger Binding="{Binding Path=LapCounterPingStatus}" Value="PingStatus.PING_SUCCESS">
                            <Setter Property="Source" Value="/Images/CheckmarkOverlayn.png"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
        </Image>
    </Grid>
</Button>
Run Code Online (Sandbox Code Playgroud)

我的viewmodel的相关部分

public class ConfigurationViewModel
{
   public enum PingStatus { PING_UNKNOWN, PING_SUCCESS, PING_FAILURE };

   public PingStatus …
Run Code Online (Sandbox Code Playgroud)

c# wpf

91
推荐指数
2
解决办法
5万
查看次数

TextBlock中的WPF格式DateTime?

我有一个TextBlockDateTime财产绑定的.如何配置日期格式?

wpf formatting textblock

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

在PropertyChanged之后ICommand CanExecute不会触发?

我有一个WPF应用程序,它显示一个绑定到命令的按钮:

<Button Command="{Binding Path=TestrunStartCommand}" Content="GO!">
Run Code Online (Sandbox Code Playgroud)

该命令定义如下:

public ICommand TestrunStartCommand
{
    get { return new RelayCommand(TestrunStartExecute, () => !IsTestrunInProgress); }
}

public bool IsTestrunInProgress
{
    get{
        return _isTestrunInProgress;
    }
    set{
        _isTestrunInProgress = value;
        RaisePropertyChanged(IsTestrunInProgressPropertyName);
    }
}   
Run Code Online (Sandbox Code Playgroud)

问题是,我设置IsTestrunInProgress为false 后不会立即启用该按钮,但只有在我单击应用程序窗口后才会启用.

你能帮我理解这个行为并告诉我如何解决这个问题吗?

进一步阅读: wpf命令模式 - 何时查询canexecute

c# wpf mvvm-light

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

printf格式浮点数与填充

以下测试代码会产生不需要的输出,即使我使用了宽度参数:

int main(int , char* [])
{
    float test = 1234.5f;
    float test2 = 14.5f;

    printf("ABC %5.1f DEF\n", test);
    printf("ABC %5.1f DEF\n", test2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

产量

ABC 1234.5 DEF   
ABC  14.5 DEF
Run Code Online (Sandbox Code Playgroud)

如何实现这样的输出,使用哪种格式字符串?

ABC 1234.5 DEF   
ABC   14.5 DEF
Run Code Online (Sandbox Code Playgroud)

c floating-point floating-point-conversion

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

根据sizeof类型的模板特化

我想提供一个模板化的函数,根据模板类型的大小改变它的实现( - > specialization).

类似的东西(省略了类型转换),但没有if/elseif:

template<class T>
T byteswap(T & swapIt)
{
    if(sizeof(T) == 2)
    {
        return _byteswap_ushort (swapIt);
    }
    else if(sizeof(T) == 4)
    {
        return _byteswap_ulong(swapIt);
    }
    else if(sizeof(T) == 8)
    {
        return _byteswap_uint64(swapIt);
    }
            throw std::exception();
}
Run Code Online (Sandbox Code Playgroud)

我知道有很多道路可以实现我的目标,但是自从我尝试了解SFINAE并且type traits我对使用这些技术的解决方案特别感兴趣,在编译时决定选择哪种特殊化以及哪些呼叫不被接纳.

也许实现一个类特征is_4ByteLong并使用boost :: enable_if ...

我不得不承认,我现在卡住了,所以我感谢你提供任何帮助或建议

c++ templates

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

首先是什么 - 堆栈展开或复制返回值

方法中使用的互斥锁是复制构造实例之前还是之后GetValues()发布的?dummy

class Protect
{};

class Test
{
public:
    Protect GetValues() const;

private:
    Protect m_protVal;
    Mutex m_mutex;
};

Protect Test::GetValues() const
{
    CLockGuard lock(m_mutex);

    return m_protVal;
}

int main(int argc, char** argv)
{
    Test myTestInstance;

    Protect dummy = myTestInstance.GetValues();
}
Run Code Online (Sandbox Code Playgroud)

让我们假设CLockGuard并且Mutex是boost lib提供的标准类.

c++

16
推荐指数
1
解决办法
663
查看次数

帮助我理解boost :: bind的这种用法

请看一下Johannes Schaub发布的这个例子来排序对的向量:

如何根据对的第二个元素对对向量进行排序?

std::sort(a.begin(), a.end(), 
          boost::bind(&std::pair<int, int>::second, _1) <
          boost::bind(&std::pair<int, int>::second, _2));
Run Code Online (Sandbox Code Playgroud)

我以为我确实理解了boost :: bind,但我遇到了这个问题.

问题1:

排序算法期望谓词函数作为第三个参数.我在这里看到的是一个布尔表达式.我错过了什么?:

boost::bind(&std::pair<int, int>::second, _1) < boost::bind(&std::pair<int, int>::second, _2)
Run Code Online (Sandbox Code Playgroud)

对于那两个绑定,boost :: bind库是否重载operator <并且正在返回某种函数指针(如lambda)?

问题2:
这让我感到困惑:

boost::bind(&std::pair<int, int>::second, _1)
Run Code Online (Sandbox Code Playgroud)

通常有一些函数指针作为绑定调用的第一个参数,但是这里是一个类成员的地址?特定绑定的结果是什么?

感谢您的时间和帮助

c++ boost-bind

15
推荐指数
1
解决办法
2112
查看次数

使用UNION将两个语句与LIMITS结合使用

有没有办法将这两个语句合并为一个而没有重复的条目?

SELECT * FROM Seq where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP) 
         order by TimeP limit 50

SELECT * FROM Seq where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)  
         order by TimeI limit 50
Run Code Online (Sandbox Code Playgroud)

我的第一个显而易见的尝试不受支持SQLITE(语法错误:限制子句应该在UNION之后而不是之前):

SELECT * FROM Seq where JULIANDAY('2012-05-25 19:02:00')<=JULIANDAY(TimeP) 
         order by TimeP limit 50
UNION
SELECT * FROM Seq where JULIANDAY('2012-05-29 06:20:50')<=JULIANDAY(TimeI)
         order by TimeI limit 50
Run Code Online (Sandbox Code Playgroud)

sql sqlite

15
推荐指数
2
解决办法
6924
查看次数

头文件中的代码将始终内联?

我刚与同事讨论了头文件中的代码:

他说,头文件中定义的代码将始终由编译器内联(如我的示例头中的函数GetNumber()中的代码).我说有时,只要编译器决定这样做,它就会被内联.那么我们哪一个人必须带上一块蛋糕才能说出肮脏的谎言?或者也许我们都错了......?

MyClass.hpp

   class MyClass
    {
    public:
    MyClass();
    ~MyClass();

    int GetNumber() const 
    {
     //...; 
     return m_number;
    };

    private:
    int m_number;
    };
Run Code Online (Sandbox Code Playgroud)

c++ inline

14
推荐指数
2
解决办法
4123
查看次数

具有缺失返回值的函数,运行时的行为

正如所料,编译器(VisualStudio 2008)将发出警告

警告C4715:'doSomethingWith':并非所有控制路径都返回一个值

编译以下代码时:

int doSomethingWith(int value)
{
    int returnValue = 3;
    bool condition = false;

    if(condition)
        // returnValue += value; // DOH

    return returnValue;
}

int main(int argc, char* argv[])
{
    int foo = 10;
    int result = doSomethingWith(foo);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但程序运行得很好.函数doSomethingWith()的返回值为0.

是仅仅是未定义的行为,还是存在一定的规则如何在运行时创建/计算结果值.非POD数据类型作为返回值会发生什么?

c++

12
推荐指数
2
解决办法
3112
查看次数