小编iam*_*pet的帖子

鼠标悬停时的 WPF 按钮背景透明度

我正在尝试更改某些按钮上的鼠标悬停效果,因为它们设置了不同的自定义背景颜色,因此当前将鼠标悬停在相同浅蓝色的方案不太适合。

我目前有这个:

    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="{TemplateBinding Background}" BorderBrush="Black" BorderThickness="2">
                        <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="False">
                <Setter Property="Background">
                    <Setter.Value>
                        <SolidColorBrush Color="{Binding Path=Background}" Opacity="1" />
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background">
                    <Setter.Value>
                        <SolidColorBrush Color="{Binding Path=Background}" Opacity="0.5" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
Run Code Online (Sandbox Code Playgroud)

我似乎无法让它工作;我试图保持按钮上设置的背景颜色,但在鼠标悬停时将背景不透明度更改为 0.5。

更改整个按钮的不透明度有效,但我不想让文本/内容也消失,只是将背景颜色变暗。

AFAIK 在这里设置 SolidColorBrush 应该可以工作,但是如何从现有背景值中获取颜色值?

编辑:

在调整了@Clemens 的以下答案后,我有了这个,效果很好!

    <Style TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}">
                        <Grid>
                            <Rectangle …
Run Code Online (Sandbox Code Playgroud)

.net wpf

6
推荐指数
1
解决办法
4457
查看次数

如何配置用 Go 编写的 Windows 服务的失败操作?

我正在使用该包在 Go 中编写 Windows 服务golang.org/x/sys/windows/svc

到目前为止,一切都很顺利,而且很容易上手,我喜欢它。

我已经编写了一些自动更新功能,我希望该服务在完成更新后自行重新启动。

我尝试生成一个进程,该进程将使用 重新启动服务SCM,但它记录了一条错误消息,这似乎与在作为本地系统运行时尝试控制服务有关。

The service process could not connect to the service controller. 
Run Code Online (Sandbox Code Playgroud)

更好/更简单的方法似乎是将os.Exit(1)服务Failure Actions设置为Restart on Failure,效果非常好!

唯一的麻烦是,似乎没有使用 Go 以编程方式配置这些选项的功能。

我做了一些挖掘,看起来它们是通过将结构传递给ChangeServiceConfig2in advapi32.dll- How to create service which restarts on crash 来配置的

golang/sys/blob/master/windows/svc/mgr/config.go中-func updateDescription(handle windows.Handle, desc string) error

代码已经调用了windows.ChangeServiceConfig2DLL 调用的链接。

SERVICE_FAILURE_ACTIONS结构的 Microsoft 文档位于此处

我无法弄清楚如何使用 Go 构建和传递该结构 - 有人有任何见解吗?

windows service go advapi32

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

Google Cloud SDK - 没有名为ipaddr的模块

今天,我们的开发容器在从Google Cloud SDK运行App Engine(GAE)标准本地开发环境时开始抛出错误.

ERROR    2017-12-15 09:38:37,766 http_runtime.py:396] bad runtime process port ['']
Traceback (most recent call last):
  File "/opt/google-cloud-sdk/platform/google_appengine/_php_runtime.py", line 103, in <module>
    _run_file(__file__, globals())
  File "/opt/google-cloud-sdk/platform/google_appengine/_php_runtime.py", line 97, in _run_file
    execfile(_PATHS.script_file(script_name), globals_)
  File "/opt/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/php/runtime/runtime.py", line 39, in <module>
    from google.appengine.tools.devappserver2 import wsgi_server
  File "/opt/google-cloud-sdk/platform/google_appengine/google/appengine/tools/devappserver2/wsgi_server.py", line 34, in <module>
    import ipaddr
ImportError: No module named ipaddr
Run Code Online (Sandbox Code Playgroud)

看起来它是由升级到自动发生的最新SDK引起的.

php google-app-engine google-cloud-platform google-cloud-sdk

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

如何在Go中管理Windows用户帐户?

我需要能够从Go应用程序中管理Windows本地用户帐户,并且似乎在不使用CGo的情况下,没有本机绑定。

我的最初搜索使人们说,最好使用“ exec.Command”来运行“ net user”命令,但是在解析响应代码时,这似乎是混乱且不可靠的。

我发现可以在netapi32.dll库中找到处理此类事件的函数,但是由于Go本身不支持Windows头文件,因此调用这些函数似乎并不容易。

https://github.com/golang/sys/tree/master/windows中的示例为例,看来Go团队一直在重新定义其代码中的所有内容,然后调用DLL函数。

我很难将其包装在一起,但是我已经有了我要针对的低级API模板,然后像在Go运行时核心一样将高级API包装在其上。

type LMSTR          ????
type DWORD          ????
type LPBYTE         ????
type LPDWORD        ????
type LPWSTR         ????
type NET_API_STATUS DWORD;

type USER_INFO_1 struct {
    usri1_name              LPWSTR
    usri1_password          LPWSTR
    usri1_password_age      DWORD
    usri1_priv              DWORD
    usri1_home_dir          LPWSTR
    usri1_comment           LPWSTR
    usri1_flags             DWORD
    usri1_script_path       LPWSTR
}

type GROUP_USERS_INFO_0 struct {
    grui0_name              LPWSTR
}

type USER_INFO_1003 struct {
    usri1003_password       LPWSTR
}

const (
    USER_PRIV_GUEST         = ????
    USER_PRIV_USER          = ????
    USER_PRIV_ADMIN         = ????

    UF_SCRIPT               = ????
    UF_ACCOUNTDISABLE       = ???? …
Run Code Online (Sandbox Code Playgroud)

windows user-management go netapi32

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