小编Cub*_*i73的帖子

WPF - Style中的RelativeSource

我的目标是将LabelContent -Property 绑定到应用StyleElements的Tag -Property .但我的解决方案似乎不起作用:


我的风格:

<Style
   TargetType="TextBox"
   x:Key="HintedTextBox">
   <Style.Resources>
      <VisualBrush
         AlignmentX="Left"
         AlignmentY="Center"
         Stretch="None"
         x:Key="HintedTextBox_Hint">
         <VisualBrush.Visual>
            <Label
               Content="{Binding RelativeSource={RelativeSource Self}, Path=Tag}"
               Foreground="LightGray" />
         </VisualBrush.Visual>
      </VisualBrush>
   </Style.Resources>
   <!-- Triggers -->
</Style>
Run Code Online (Sandbox Code Playgroud)

我的文本框:

<TextBox
   Style="{StaticResource ResourceKey=HintedTextBox}"
   x:Name="tbTest" />
Run Code Online (Sandbox Code Playgroud)

wpf xaml binding styles relativesource

10
推荐指数
1
解决办法
9456
查看次数

类型中的多个类型参数?

让我们假设我有一个Stack带有一个实例的类型List:

class Stack a where
    push :: a -> Integer -> a
    pop :: a -> a
    last :: a -> Integer

data List = Empty | Element Integer List
instance Stack List where
    push list value = Element value list
    pop Empty = error "No elements"
    pop (Element _ list) = list
    last Empty = error "No elements"
    last (Element value _) = value
Run Code Online (Sandbox Code Playgroud)

如何Stack定义以便List不限于Integer价值观?

-- class Stack (?) …
Run Code Online (Sandbox Code Playgroud)

haskell typeclass

9
推荐指数
2
解决办法
302
查看次数

错误C2360:'case'标签跳过'hdc'的初始化

在以下两个定义中,产生错误C2360的巨大差异在哪里?

switch (msg) {
    case WM_PAINT:
        HDC hdc;
        hdc = BeginPaint(hWnd, &ps); // No error
        break;
}
Run Code Online (Sandbox Code Playgroud)

switch (msg) {
    case WM_PAINT:
        HDC hdc = BeginPaint(hWnd, &ps); // Error
        break;
}
Run Code Online (Sandbox Code Playgroud)

c++ winapi switch-statement

7
推荐指数
2
解决办法
1万
查看次数

功能别名

我想从kernel32.dll导入一些函数,但我想使用不同的名称.功能示例:

[DllImport("kernel32.dll")] private static extern bool ReadProcessMemoryProc64 (...);

private static bool BetterReadableAndWriteableName (...) {
    ReadProcessMemoryProc64(...);
}
Run Code Online (Sandbox Code Playgroud)

如果有另一种方式,包装该功能是我实际上不想要的.

c# winapi alias function extern

7
推荐指数
2
解决办法
2942
查看次数

将float转换为二进制表示(使用MemoryStream?)

我想将一个给定float转换为二进制表示.我试图将浮点值写入a MemoryStream,MemoryStream逐字节读取该字节并将字节转换为其二进制表示.但每次尝试都失败了.

  • "无法读取封闭的流"(但我只关闭了作者)
  • 出于测试目的,我简单地写了一个整数(我认为大小为4个字节)MemoryStream,当我没有刷新时为0 的长度,而当我做的时StreamWriter,为1.

我确信有一种更好的方法可以将floats 转换为二进制,但我也想了解一下这个MemoryStream类.

c# binary memorystream floating-point-conversion

6
推荐指数
2
解决办法
9625
查看次数

C#中的`PROCESSENTRY32W`?

我声明了这个函数Process32FirstW和结构PROCESSENTRY32W:

[DllImport("KERNEL32.DLL", CallingConvention = CallingConvention.StdCall, EntryPoint = "Process32FirstW")]
private static extern bool Process32FirstW (IntPtr hSnapshot, ref ProcessEntry pProcessEntry);

[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode, Size = 568)]
internal struct ProcessEntry {
    [FieldOffset(0)] public int Size;
    [FieldOffset(8)] public int ProcessId;
    [FieldOffset(32)] public int ParentProcessID;
    [FieldOffset(44), MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string ExeFile;
}
Run Code Online (Sandbox Code Playgroud)

在调用时Process32FirstW(使用64位进程),我总是TypeLoadException说一句话

ProcessEntry无法加载类型,因为偏移44处的对象字段对齐错误或与另一个字段重叠,而另一个字段不是对象字段.

我也尝试使用char[],而不是stringProcessEntry.ExeFile使用Pack=4,并Pack=8在该结构的StructLayoutAttribute.我总是设置ProcessEntry.Size为568,我从C++程序(64位版本)复制了偏移数据:

typedef unsigned long long …
Run Code Online (Sandbox Code Playgroud)

c# structlayout

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

`os.rmdir` 不在空目录上工作?

假设以下目录结构:

A
+-- B
|   +-- C
|   |   +-- D
|   |   |   +-- E
Run Code Online (Sandbox Code Playgroud)

其中没有目录包含任何文件(甚至不可见的文件)。跑步

os.rmdir("A/B/C/D/E"); os.rmdir("A/B/C/D"); os.rmdir("A/B/C"); os.rmdir("A/B"); os.rmdir("A")
Run Code Online (Sandbox Code Playgroud)

在 Python (3.5) 中产生

OSError: [WinError 145] The directory is not empty: '##'
Run Code Online (Sandbox Code Playgroud)

其中##或者是ABCD,但在执行各功能手动不产生此异常。我知道有shutil.rmtree,但文件os.rmdir明确指出

移除(删除)目录路径。仅在目录为空时有效,否则OSError会引发。为了删除整个目录树,shutil.rmtree()可以使用。

至少在 Windows 系统上,情况似乎并非如此。到目前为止我发现的唯一解决方法(不包括shutil.rmtree)是

def rm (dir_path):
    while len(os.listdir(dir_path)) > 0:
        pass # Maybe include timeout here to not lock the program …
Run Code Online (Sandbox Code Playgroud)

windows rmdir python-3.x

5
推荐指数
0
解决办法
911
查看次数

结构化绑定中缺少类型信息

我刚刚了解了 C++ 中的结构化绑定,但有一件事我不喜欢

auto [x, y] = some_func();
Run Code Online (Sandbox Code Playgroud)

就是隐藏了和auto的类型。我必须查找声明才能知道and的类型。或者,我可以写xysome_funcxy

T1 x;
T2 y;
std::tie(x, y) = some_func();
Run Code Online (Sandbox Code Playgroud)

但这仅在 和xy默认可构造且不是 的情况下才有效const。有没有办法写

const auto [x, y] = some_func();
Run Code Online (Sandbox Code Playgroud)

x对于和 的非默认构造类型,以使得和 的y类型可见的方式?当我将and声明为与的返回类型不兼容(即not )时,编译器最好应该抱怨。xyxysome_funcconst auto /* T1, T2 */ [x, y] = some_func();


澄清。由于我的问题下面的评论似乎围绕是否使用&,并且以前的一些答案将我的问题误解为“使用哪种语法来提取返回对的数据类型”,我认为我需要澄清我的问题。

假设我们的代码分布在多个文件中

//
// API.cpp
//
#include <utility>

class Foo {
public:
    Foo () {}
}; …
Run Code Online (Sandbox Code Playgroud)

c++ c++17 structured-bindings

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

切断文件名的扩展名

我有一个文件名列表,如

index.min.html
index.dev.html
index.min.js
index.dev.js
There.are.also.files.with.multiple.dots.and.other.extension
Run Code Online (Sandbox Code Playgroud)

我想切断文件名的扩展名,但问题是我只能match用于此任务.

我尝试了许多正则表达式,看起来"index.min.html".match( /^((?!:(\.[^\.]+$)).+)/gi );想要选择没有最后一个点和扩展名的文件名,但是他们选择了孔文件名,没有或第一个点之前的部分.有没有办法只选择没有扩展名的文件名?

javascript regex filenames

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

在哪里定义PAINTSTRUCT以及为什么要定义HDC?

我的问题很简单,也不是很重要.

  1. 我开始学习编写Win32应用程序.当我从其他人那里读取代码时,我经常会看到他们PAINTSTRUCT ps;在switch语句之前放入WndProc.他们为什么不把这个问题放进去WM_PAINT?他们为内存分配ps,然后不使用它?

  2. 我总是看到PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps);.但我检查了ps.hdc多次的值,ps.hdc并且hdc每次的值都相等.还有其他原因可以定义hdc可读性或编写更少的代码吗?

(对不起,如果我的英语不好而问题不属于这个社区的水平)

c++ memory winapi hdc

2
推荐指数
1
解决办法
1980
查看次数