小编Ωme*_*Man的帖子

动态添加TabItems

TabControl控制了一下

<TabControl Name="Farms_myVillages"
            ItemsSource="{Binding Villages}">
</TabControl/>
Run Code Online (Sandbox Code Playgroud)

在后面的代码中,我动态添加一些选项卡TabControl,如下所示:

foreach (Village vill in Villages)
{
    TabItem tab = new TabItem();
    tab.Header = vill.Name;
    VillageUserControl c = new VillageUserControl();
    c.DataContext = vill;
    tab.Content = c;
    Farms_myVillages.Items.Add(tab);
}
Run Code Online (Sandbox Code Playgroud)

这里VillageUserControl是一个UserControl以指定村处理.这段代码工作正常,它得到了预期的结果......

问题是我不希望这个代码落后于代码xaml本身.

我试试这个:

<TabControl Name="Farms_myVillages"
            ItemsSource="{Binding Villages}">
      <TabControl.ItemContainerStyle>
          <Style TargetType="TabItem">
              <Setter Property="Header" Value="{Binding Name}"/>
              <Setter Property="Content">
                 <Setter.Value>
                    <u:VillageUserControl DataContext="{Binding}"/>
                 </Setter.Value>
              </Setter>
          </Style>
      </TabControl.ItemContainerStyle>
</TabControl>
Run Code Online (Sandbox Code Playgroud)

在我运行它之后,它抛出一个异常:"指定的元素已经是另一个元素的逻辑子元素.首先断开它."

我错过了什么?请帮帮我......

c# data-binding wpf xaml tabcontrol

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

我是否可以实现一个接口,该接口包含一个子类型属性的接口?

我收到以下错误:

ClassName.PropertyName无法实现IClassType.PropertyName,因为它没有匹配的返回类型IBasePropertyType

现在,代码:

public class ClassName : IClassType
{
    public IChildPropertyType PropertyName { get; set; }
}

public interface IClassType
{
    public IBasePropertyType PropertyName { get; set; }
}

public interface IBasePropertyType
{
    // some methods
}

public interface IChildPropertyType : IBasePropertyType
{
    // some methods
}
Run Code Online (Sandbox Code Playgroud)

有没有办法做我正在尝试的事情?我知道问题在于共同/逆转,但我似乎无法弄清楚如何做到这一点.

c# interface covariance contravariance

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

如何正确使用StreamWriter类?

我正在使用StreamWriter类进行文件操作,这段代码中是否有任何我没有看到的问题?

比如我需要将它放入一个try catch finally区块吗?

StreamWriter sr = new StreamWriter(streamFolder);
sr.Write(details);

File.SetAttributes(streamFolder, FileAttributes.Hidden);
sr.Close();
Run Code Online (Sandbox Code Playgroud)

c# streamwriter

9
推荐指数
4
解决办法
4万
查看次数

ListBoxItem Horizo​​ntalContentAlignment在ListBox的整个宽度上拉伸

ListBoxItem在Windows Phone 8应用程序上遇到问题,同时试图让它们伸展到所有宽度ListBox.

我的ListBox:

<ListBox 
      ItemsSource="{Binding Events}" 
      behaviors:ItemClickCommandBehavior.Command="{Binding EventSelectedCommand}"
      ItemTemplate="{StaticResource EventListTemplateSelector}"/>
Run Code Online (Sandbox Code Playgroud)

它的DataTemplates在一个单独的xaml资源文件中:

<DataTemplate x:Key="EventListHeaderTemplate">
    <Border HorizontalAlignment="Stretch">
        <Grid Height="50">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="6*"/>
            </Grid.ColumnDefinitions>
            <Image Grid.Column="0" Source="{Binding ImageUri}" VerticalAlignment="Center" HorizontalAlignment="Center" Height="30"/>
            <TextBlock Grid.Column="1" Text="{Binding SomeText}" VerticalAlignment="Center" HorizontalAlignment="Left" Foreground="Black"/>
        </Grid>
    </Border>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

我不能让这些物品真正拉伸,我不知道问题出在哪里.我试图设置ItemContainerStyleHorizo​​ntalCOntentAlignment ="Stretch",但它不起作用.我已经尝试了许多其他组合,似乎只将Border或Grid宽度设置为常量工作,另一个有效的解决方案是将Border宽度设置为绑定到包含ListBox的ActualWidth,但我想使用Stretch变种如果可以使它工作.

xaml listbox alignment listboxitem windows-phone-8

9
推荐指数
1
解决办法
2660
查看次数

使用.NET 4.5异步将Azure blob以异步方式流式传输到客户端,等待

我正在实现我自己的异步HTTP处理程序,HttpTaskAsyncHandler并使用async和await来保持它完全异步.

我想直接将azure blob流式传输到客户端.确实,我可以将客户端重定向到blob URL并让它们直接下载,但我们假设我不想这样做(例如我的blob是私有的).

这是我目前的实施:

码:

    public async Task<bool> DownloadToStreamAsync(ICloudBlob blob, Stream stream)
    {
        bool blobFound = true; 
        IAsyncResult asyncResult = blob.BeginDownloadToStream(stream, null, null);
        await Task.Factory.FromAsync(asyncResult, (r) =>
        {
            try
            {
                blob.EndDownloadToStream(r);
            }
            catch (StorageException)
            {
                blobFound = false;
            }
        });
        return blobFound;
    }
Run Code Online (Sandbox Code Playgroud)

用法:

    public override async Task ProcessRequestAsync(HttpContext context)
    {
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageAccountConnectionString"));
        CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
        CloudBlobContainer container = blobClient.GetContainerReference("container1");
        CloudBlockBlob blockBlob = container.GetBlockBlobReference("blob1.txt");

        await DownloadToStreamAsync(blockBlob, context.Response.OutputStream);
    }
Run Code Online (Sandbox Code Playgroud)

这段代码确实是完全异步的,并且会在流式传输时释放我的HTTP服务器以处理其他客户端吗?(即如果我有一个服务器线程)

是否可以保持blob压缩(GZIP)并让客户端使用Content-Encoding: gzip

更新:(从存储2.1.0.0 …

c# azure azure-storage-blobs async-await .net-4.5

9
推荐指数
1
解决办法
5858
查看次数

PDFsharp自动换行

我似乎无法理解如何使用PDFsharp在我创建的矩形中包装文本.我已经看过文章解释如何,但是当我尝试它时,我的文本仍然延伸到PDF的页面.任何帮助都会很棒(这是我第一次使用PDFsharp).

rect = new XRect(20, 300, 400, 100);
tf.Alignment = XParagraphAlignment.Left;
gfx.DrawString("\t • Please call the borrower prior to closing and confirm your arrival time and the closing location. \n", font, XBrushes.Black, rect, XStringFormats.TopLeft);
rect = new XRect(20, 320, 100, 100);
gfx.DrawString("\t • If the borrower needs to change the closing appointment time or date for any reason please have them call McDonnell Law Firm at 866-931-8793 \n", font, XBrushes.Black, rect, XStringFormats.TopLeft);
rect = new XRect(20, 340, 100, 100);
gfx.DrawString("\t …
Run Code Online (Sandbox Code Playgroud)

c# pdfsharp

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

如何强制Grid缩小包含ScrollViewer的自动调整大小的行(如果需要)?

我是WPF的新手.我想做这个简单的布局,我就是做不到.让我为你画画:

它应该如何工作

我们的想法是在没有足够空间的情况下将蓝色文本保持在绿色元素下方但是绿色元素应该放在可滚动容器内(可以看到垂直滚动条).

我尝试过StackPanel和Grid,但都失败了.StackPanel根本不收缩行.如果顶部RowDefinition的高度设置为"auto"(内部的ScrollViewer不显示其滚动条),Grid会执行相同的操作.如果它设置为星形,则蓝色文本向下移动到至少一半的空间(取决于底行的高度设置).底行的高度可以是"自动"或星形,蓝色文本的VerticalAlignment设置为Top但是行的高度必须保持至少与文本一样大.当然整个区域(黑匣子)不能被其内容拉伸 - 它取决于窗口的大小.

如果您知道如何使其正常工作,请帮助.如果你愿意,可以在XAML中发布.谢谢!

wpf grid layout scrollviewer

9
推荐指数
1
解决办法
3608
查看次数

当设置标题的MaxWidth时,为所有DataGridColumns应用相同的高度

我有一个ItemsControl包含动态可变数量的DataGrids:

<ItemsControl ItemsSource="{Binding Table.Columns}">
   <ItemsControl.ItemsPanel>
      <ItemsPanelTemplate>
         <StackPanel Orientation="Horizontal" VerticalAlignment="Stretch"/>
      </ItemsPanelTemplate>
   </ItemsControl.ItemsPanel>

   <ItemsControl.ItemTemplateSelector>
      <local:ColumnTemplateSelector InputParameterColumnTemplate="{StaticResource InputParamterColumn}"
                                    SingleParameterColumnTemplate="{StaticResource SingleParameterColumn}"/>
   </ItemsControl.ItemTemplateSelector>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

"SingleParameterColumn"的模板定义如下:

    <DataTemplate x:Key="SingleParameterColumn">       
        <DataGrid AutoGenerateColumns="False" ItemsSource="{Binding Cells}"      
                                   RowHeight="25" RowHeaderWidth="0" >
            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding Name}"
                                           TextWrapping="Wrap"
                                           TextAlignment="Center"
                                           MaxWidth="60">
                                </TextBlock>
                                <Button>
                                    <Image ... />
                                </Button>
                            </StackPanel>
                        </DataTemplate>
                    </DataGridTemplateColumn.HeaderTemplate>
                    <DataGridTemplateColumn.CellTemplateSelector>....
                    </DataGridTemplateColumn.CellTemplateSelector>
                </DataGridTemplateColumn>
            </DataGrid.Columns>
        </DataGrid>
    </DataTemplate>
Run Code Online (Sandbox Code Playgroud)

总有一个InputParameterColumn,至少有一个SingleParameterColumn.它InputParameterColumn具有固定的标题名称,而标题SingleParameterColumn可以任意长.

因为我不希望有很宽列我已经定义了MaxWidthTextBlock在头模板60,这将导致头要高,如果一列的名称很长.

这会导致列具有不同的高度,具体取决于标题名称的长度. 这是问题:

有什么方法可以找出我的ItemsControl中最高的标题有多高,然后为所有其他标题设置相同的高度,以便我的列都具有相同的大小?

c# wpf xaml

9
推荐指数
1
解决办法
562
查看次数

在XAML中,我想使用StringFormat来显示数值,而不会发生任何舍入.可能吗?

所以在我的XAML中我有这个:

<TextBlock Text="{Binding MyDecimalProperty, StringFormat={}{0:#.###}}"/>
Run Code Online (Sandbox Code Playgroud)

当MyDecimalProperty的值是例如5.35570256时,显示的TextBlock值是5.356

有没有办法让TextBlock显示5.355(即截断数字而不是舍入它)使用StringFormat?

我知道我可以使用值转换器,但我想知道我是否可以使用StringFormat或XAML中定义的任何其他内容来实现相同的功能.

更新:人们一直在想我为什么不想使用转换器.请以粗体显示.这不是我不想要的; 我只是想知道我是否可以使用StringFormat或任何其他XAML构造做同样的事情.

谢谢.

c# wpf xaml string-formatting

9
推荐指数
1
解决办法
5374
查看次数

SignalR配置HubConnection

我正在使用Asp.Net SignalR 2.

在.net客户端(我使用的是Microsoft.AspNet.SignalR.Client)中,是否需要部署HubConnection?

我尝试过这样做,但需要花费太多时间......

.net asp.net dispose signalr.client signalr-2

9
推荐指数
1
解决办法
5006
查看次数