Attached Dependency Property ile Resimli Tuş Oluşturma

Yeni bir kontrol oluşturmadan, mevcut Button kontrolüne ImageSource ve Text ekleyerek resimli tuş oluşturabiliyoruz. Ek olarak resim yüklenirken durumunu tuşun üzerinde görüntülemek için ShowProgress ve ProgressValue ekledim.
Buradan örnek projeyi indirebilirsiniz.

<Window x:Class="LazyImageButton.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:ap="clr-namespace:LazyImageButton.AttachedProperties"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" DataContext="{Binding RelativeSource={RelativeSource Self}}">
    <Grid>
        <Button Style="{StaticResource SolidImageButtonStyle}" ap:ImageButton.ImageSource="{Binding Source}" ap:ImageButton.Text="Text" ap:ImageButton.ShowProgress="True" ap:ImageButton.ProgressValue="{Binding ProgressValue}"/>
    </Grid>
</Window>

ASP.NET MVC Web API ile Dosya Sunucusu

Örnek projeyi buradan indirebilirsiniz.

  • Asp.Net Web Api projesi oluşturulur.
  • Dosyalar App_Data klasörü altına atılır.
  • Web.Config’de  system.webServer altına aşağıdaki satır eklenir.
    <modules runAllManagedModulesForAllRequests="true"/>
  • Controllers altında FileController.cs oluşturulur.
    using System.IO;
    using System.Net;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Web;
    using System.Web.Http;
    
    namespace FileServer.Controllers
    {
        public class FilesController : ApiController
        {
            // GET api/files/test_v1.jpg?sessionId=test
            public HttpResponseMessage GetFile(string sessionId, string name)
            {
                HttpResponseMessage response;
    
                // Session kontrolü burada yapılabilir.
                if (sessionId == "test")
                {
                    var filePath = HttpContext.Current.Server.MapPath("~/App_Data/" + name);
    
                    if (File.Exists(filePath))
                    {
                        response = new HttpResponseMessage 
                                       { 
                                           StatusCode = HttpStatusCode.OK, 
                                           Content = new StreamContent(File.OpenRead(filePath)) 
                                       };
    
                        response.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(Path.GetExtension(filePath)));
    
                        return response;
                    }
                    else
                    {
                        response = new HttpResponseMessage(HttpStatusCode.NotFound);
                    }
                }
                else
                {
                    response = new HttpResponseMessage(HttpStatusCode.Forbidden);
                }
    
                return response;
            }
        }
    }