标签: wpf-controls

如何在WPF中为用户控件注入依赖项

在WPF中透明地将依赖项(使用IOC容器)注入用户控件的最佳方法是什么?

我假设用户控件是窗口或其他用户控件的XAML的一部分.我认为父母(无论是谁)不应对此负责.从父级手动注入依赖项的解决方案看起来不够干净.我希望避免明确管理组件的依赖关系,因为它消除了IOC的想法.

是否在创建逻辑树时引发任何事件,以便我可以拦截它并注入我的依赖项?

编辑:依赖我也意味着ViewModel,Controller,Presenter(使用的模式)

谢谢,安德烈

.net wpf wpf-controls

13
推荐指数
2
解决办法
4596
查看次数

当WPF进度条中的Indeterminate ="True"时,如何显示进度?

这必须是所有问题中最简单的问题,但我似乎无法弄明白.我有进度条,如何让它显示进度.我该如何开始呢?

<ProgressBar x:Name="ProgressUpload" Margin="5" IsIndeterminate="True" ></ProgressBar>
Run Code Online (Sandbox Code Playgroud)

wpf wpf-controls

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

将字符输入到RichTextBox中的速度太慢,如何让速度更快?

当我使用键盘输入文字时,我看到编辑器窗口中的字符结尾,有点在键盘后面,它给我的工作带来了不便,如何使按键同时出现这些字符.

wpf wpf-controls

13
推荐指数
1
解决办法
1248
查看次数

是否可以在WPF ItemsControl中模拟border-collapse(ala CSS)?

我正在为WPF中的项目设置样式ListBox,并希望在每个项目周围添加边框.与BorderThickness设置为1,例如,相邻的项之间的上下边框都引出,并因此出现比侧边界"厚",如下所示:

ListBoxItem边框示例

生成这些的项模板ListBoxItems是:

<DataTemplate>
  <Border BorderThickness="1" BorderBrush="DarkSlateGray" Background="DimGray" Padding="8 4 8 4">        
    <TextBlock Text="{Binding Name}" FontSize="16"/>
  </Border>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我想"折叠"这些相邻的边界,例如,可以通过CSS.我知道BorderThickness可以单独为左/右/上/下边框定义,但这也会影响第一个或最后一个项目的边框,这是不希望的.

有没有办法用WPF实现这一目标?Border我缺少的属性,还是需要不同的方法来创建边界?

wpf border wpf-controls

13
推荐指数
1
解决办法
3321
查看次数

WPF:如何设置TabItem的背景?

如何设置TabItem的背景?我尝试了以下代码:

<TabControl>
    <TabItem Header="Test" Background="Blue" Foreground="Red" />
</TabControl>
Run Code Online (Sandbox Code Playgroud)

Foreground工作,但Background不起作用.

在此输入图像描述

有任何想法吗?谢谢

wpf wpf-controls tabitem

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

无法设置DataGridColumn的ToolTip

我尝试了以下方法:

<tk:DataGridTextColumn 
    Header="Item" 
    Binding="{Binding Item.Title}" 
    ToolTipService.ToolTip="{Binding Item.Description}" />
Run Code Online (Sandbox Code Playgroud)

我没有看到任何工具提示.

有任何想法吗?甚至实施了吗?

wpf datagrid wpftoolkit wpf-controls datagridcolumn

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

WPF TextBox验证

我已将验证连接到绑定到TextBox容器的模型.当窗口第一次打开时,验证错误出现,因为模型为空,我不希望看到验证错误,直到提交窗口或文本TextBox已更改或丢失焦点.

这是TextBox:

<TextBox Text="{Binding 
                   Path=Firstname, 
                   UpdateSourceTrigger=PropertyChanged, 
                   ValidatesOnDataErrors=True}"
         Width="124"
         Height="24"/>
Run Code Online (Sandbox Code Playgroud)

怎么能实现这一目标?

validation wpf textbox wpf-controls

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

TextBox不支持系统十进制(点或逗号)

如果我将Texta 绑定TextBox到float属性,则显示的文本不符合系统十进制(点或逗号).相反,它总是显示一个点('.').但是如果我在a中显示值MessageBox(使用ToString()),则使用正确的System Decimal.

在此输入图像描述

XAML

<StackPanel>
    <TextBox Name="floatTextBox"
             Text="{Binding FloatValue}"
             Width="75"
             Height="23"
             HorizontalAlignment="Left"/>
    <Button Name="displayValueButton"
            Content="Display value"
            Width="75"
            Height="23"
            HorizontalAlignment="Left"
            Click="displayValueButton_Click"/>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

代码背后

public MainWindow()
{
    InitializeComponent();
    FloatValue = 1.234f;
    this.DataContext = this;
}
public float FloatValue
{
    get;
    set;
}
private void displayValueButton_Click(object sender, RoutedEventArgs e)
{
    MessageBox.Show(FloatValue.ToString());
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经用一个转换器解决了这个问题,转换器用系统十进制取代了dot(这是有效的),但这是必要的原因是什么?这是设计,是否有更简单的方法来解决这个问题?

SystemDecimalConverter(以防其他人遇到同样的问题)

public class SystemDecimalConverter : IValueConverter
{
    private char m_systemDecimal = '#';
    public SystemDecimalConverter()
    {
        m_systemDecimal = GetSystemDecimal();
    }
    object IValueConverter.Convert(object value, Type …
Run Code Online (Sandbox Code Playgroud)

c# wpf culture textbox wpf-controls

12
推荐指数
1
解决办法
4326
查看次数

如何刷新循环内设置的可视控件属性(TextBlock.text)?

每次循环迭代,我都想直观地更新文本块的文本.我的问题是WPF窗口或控件在循环完成之前不会直观刷新.

for (int i = 0; i < 50; i++)
{
    System.Threading.Thread.Sleep(100);
    myTextBlock.Text = i.ToString();                
}
Run Code Online (Sandbox Code Playgroud)

在VB6中,我会打电话DoEvents()control.Refresh.目前我只是喜欢类似的快速和肮脏的解决方案DoEvents(),但我也想了解替代方案或"正确"的方法来做到这一点.我可以添加一个简单的绑定语句吗?语法是什么?提前致谢.

wpf binding wpf-controls inotifypropertychanged

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

以编程方式将标签添加到网格

嘿所有我想使用以下代码向我的网格添加标签:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs) Handles Button1.Click
  Dim dynamicLabel As New Label()
  Dim g As New Grid

  dynamicLabel.Name = "NewLabel"
  dynamicLabel.Content = "TEST"
  dynamicLabel.Width = 240
  dynamicLabel.Height = 30
  dynamicLabel.Margin = New Thickness(0, 21, 0, 0)
  dynamicLabel.Foreground = New SolidColorBrush(Colors.White)
  dynamicLabel.Background = New SolidColorBrush(Colors.Black)

  Grid.SetRow(dynamicLabel, 0)
  Grid.SetColumn(dynamicLabel, 6)
  g.Children.Add(dynamicLabel)
End Sub
Run Code Online (Sandbox Code Playgroud)

但是,按下按钮后,我从未在网格上看到任何东西......我缺少什么?

vb.net wpf wpf-controls

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