小编Bob*_*ers的帖子

udev:设备在启动时连接

我正在使用udev来检测我的Ubuntu 10.04 LTS x64服​​务器上的USB驱动器连接和断开连接.当机器运行时连接USB设备时,一切正常,但如果在启动时已经存在,我的脚本无法完成,显然是因为mkdir /tmp/blah不起作用.

如果我随后sudo udevadm trigger在终端打字,一切都还好.

我假设在udev首先根据其规则评估连接的设备时,根文件系统尚未安装.

因此,我的问题是:

  1. 我是否正确识别了问题?
  2. 有没有一种标准的方法可以解决它 - 也就是说/tmp/,在/安装之前和之后我可以使用它的替代品吗?

linux ubuntu boot udev

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

.net DrawString/StringFormat问题

我正在开发一个.NET 3.5赢形式的程序和我碰到与文本绘制一个"有趣"的问题.

我正在实现一个文本编辑控件,它使用DrawString()和StringFormat.GenericTypographic(以下称为GT)绘制文本.当用户键入时,行中较早的单词(或单词组)随机地左右移动.

它似乎可能是舍入误差 - 受影响的块看起来在水平平面中移动一个像素,因为字母被添加到线的末端.如果我使用StringFormat.GenericDefault(GD),则不会发生这种情况,但字符渲染的准确性会降低,这是不可接受的.

我推断我可以慢慢地将GD改为GT(每个设置都在MSDN中进行讨论,显然可以在调试器中进行检查)并查看哪些FormatFlags或其他设置导致了这一点并从那里开始.但是,如果我拿一份GD的副本,改变所有的属性,使它与GT相同,那么字符的位置是完全不同的 - 这两个所谓的相同对象的行为显然是不一样的.

像恕我直言的东西太多,.net Reflector表明StringFormat只是非托管对象的包装器,我只能假设并非所有这些属性都暴露给.net软件.

任何人都可以提出任何可能对我有用的建议吗 我知道TextRenderer可能会提供另一种渲染方法,但我在设计过程的早期就打了折扣(虽然我实际上不能记住现在的问题......).

编辑

我用于渲染的代码如下:

sForm = new StringFormat(StringFormat.GenericTypographic);
sForm.FormatFlags |= StringFormatFlags.MeasureTrailingSpaces;

using (SolidBrush brush = new SolidBrush(frmt.ForegroundColour))
  context.DrawString(line.Text, frmt.DisplayFont, brush, new PointF(horizontal, height), sForm);
Run Code Online (Sandbox Code Playgroud)

.net system.drawing winforms

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

WPF DataGrid中的错误

DataGrid当用户单击最后一行以添加新行时,标准WPF中存在已知错误.

抛出异常是因为在处理MS.Internal.NamedObject表示'NewItemPlaceholder'的方法时,ConvertBack方法(在默认转换器上)失败.如果CanUserAddRows设置为True(并且集合支持它),则此实例用于表示空白的"新行".实际上,在尝试跟踪绑定失败时,似乎实际上在异常处理程序中抛出了FormatException.有关更多信息,请参阅Nigel Spencer的博客.

基本上解决方法是在SelectedItem绑定上添加转换器:

public class IgnoreNewItemPlaceholderConverter : IValueConverter
{
    private const string newItemPlaceholderName = "{NewItemPlaceholder}";
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null && value.ToString() == newItemPlaceholderName)
            value = DependencyProperty.UnsetValue;
        return value;
    }
}
Run Code Online (Sandbox Code Playgroud)

在XAML中使用它的一个例子是:

<Window.Resources>   
    <converters:IgnoreNewItemPlaceHolderConverter x:Key="ignoreNewItemPlaceHolderConverter"/>
</Window.Resources>
<toolkit:DataGrid ItemsSource="{Binding Persons}" 
                  AutoGenerateColumns="False"
                  SelectedItem="{Binding SelectedPerson, Converter={StaticResource ignoreNewItemPlaceHolderConverter}}"
                  IsSynchronizedWithCurrentItem="True">...</toolkit:DataGrid>
Run Code Online (Sandbox Code Playgroud)

我的问题是我试图对我自己实施这个'修复'/'黑客' DataGrid …

c# wpf binding datagrid mvvm

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

复杂 Xamarin Forms 自定义控件中的内容

我正在通过派生创建自定义控件ContentView。我的目标是让用户使用该类,就像您期望使用单个内容的任何控件一样:

<local:NewControl>
  <Image source="..." />
</local:NewControl>
Run Code Online (Sandbox Code Playgroud)

但是,我希望控件包含一个网格,然后将内容放置在网格中。ContentPresenter从概念上讲(即忽略不能以这种方式使用的事实),我希望NewControl.xaml看起来像这样:

<ContentView ...>
  <Grid x:Name="HiddenGrid">
    <ContentPresenter />
  </Grid>
</ContentView>
Run Code Online (Sandbox Code Playgroud)

执行我上面详细介绍的操作会导致HiddenGrid被 替换Image,而不是将图像作为 的子项插入可视化树中ContentPresenter

目前,我正在通过派生Grid而不是 来实现我的目标ContentView,但我想隐藏此实现细节,以便消费者无法干扰Grid并拥有一个只能分配单个内容的控件。

这看起来应该很简单(并且广泛适用于需要以某种方式修饰内容的各种场景),但我看不出有什么方法可以做到这一点。我是否遗漏了一些明显的东西,这是不可能的,还是只是很难做到并且我需要阅读一些东西(例如控制模板)?

c# xaml xamarin.forms

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

标签 统计

c# ×2

.net ×1

binding ×1

boot ×1

datagrid ×1

linux ×1

mvvm ×1

system.drawing ×1

ubuntu ×1

udev ×1

winforms ×1

wpf ×1

xamarin.forms ×1

xaml ×1