Browsed by
Month: October 2013

“Làm màu” cho Visual Studio

“Làm màu” cho Visual Studio

Gần đây mình mới mò được một trang siêu hay :3

StudioStyles là trang chuyên share các bộ màu dành cho Visual Studio. Bạn nào code nhiều chắc là đã rõ sự quan trọng của việc tinh chỉnh màu sắc khi lập trình. Mặc dù bộ màu của VS đã được tinh chỉnh rồi, nhưng nhiều lúc vẫn có phần đơn điệu. Và site này chính là giải pháp cho bạn. Đại loại là bao giờ bạn cảm thấy chán với scheme mày hiện tại thì vào đây, chọn một scheme ưa thích rồi tải về.

Sau đó trở lại với VS, bạn vào menu TOOLS > Import and Export Settings…

Chọn Import selected environment settings

Để cho chắc ăn, ở bước tiếp theo, bạn nên lưu lại bộ setting hiện thời của bạn, sau đó click Next

Ở bước tiếp theo, bạn click Browse rồi dẫn đến file setting vừa tải về, cuối cùng nhấn Next, cửa sổ tiếp theo bạn cứ Next cho đến khi xong là được

Kết quả là bạn sẽ được như thế này

Vậy là xong, giờ màu mè của VS máy mình giống y chang màu trên Sublime, tạo được sự đồng bộ nên code rất phê :3

Tuy nhiên có một vài lưu ý nhỏ, nếu máy bạn đang cài các công cụ hỗ trợ viết code như Visual Assist X hay Resharper thì nhớ disable bộ màu của các công cụ này đi rồi hãy import setting, chứ không thì cũng công cốc.

Ngắn vậy thôi, chúc các bạn thành công. Dô lô \m/

Cài đặt nhanh một bộ chuyển đổi các giá trị boolean

Cài đặt nhanh một bộ chuyển đổi các giá trị boolean

Chào các bạn, gần đây mình gặp một vấn đề như thế này: mình muốn convert một thuộc tính kiểu bool ra nhiều kiểu giá trị, để bind lên giao diện. Mình tiến hành bằng việc dùng các converter như thông thường, nhưng vấn đề là lượng converter mình làm là khá nhiều (tầm 15 cái), ăn ở tốt thế nào mà mò được post này :3 nên mang về share các bạn.

Vấn đề rất đơn giản, ví dụ bạn có một class thế này:

public class MyHater
{
    public string Name { get; set; } 
    public bool Gender { get; set; } //1-Male, 2-Female
}

Ở giao diện chính của chương trình, bạn muốn nếu là nam thì ghi rõ là “Male” và tô xanh, trong khi là nữ thì ghi rõ “Female” và tô đỏ. Việc này có thể dễ dàng thực hiện bằng cách cài đặt 2 class với interface {php}IValueConverter{/php}, ví dụ như {php}GenderToStringConverter{/php} và {php}GenderToColorConverter{/php}.

public class GenderToStringConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value ? "Male" : "Female";
    }
}

public class GenderToColorConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value ? new SolidColorBrush(Color.FromArgb(255,0,0,255)) : new SolidColorBrush(Color.FromArgb(255,255,0,0));
    }
}

Đơn giản phải không, nhưng mà ở đây mới chỉ có 2 converter, giả sử bạn muốn cài 10 hay thậm chí là 20 cái thì sao :v nhiều vờ lờ luôn đúng không? Có thể bạn sẽ copy và paste, nhưng mà làm như thế lại rất tốn thời gian và khó để quản lý code, trong khi mỗi class chỉ khác nhau 2 giá trị mà bạn return.

Vậy nên chúng ta sẽ đi đường khác. Đầu tiên chúng ta sẽ cài đặt một class với interface IValueConverter, điểm đặc biệt của class này là nó sẽ bảo đảm trả về một kiểu T, đồng thời nó sẽ có thêm 2 thuộc tính kiểu T: TrueValueFalseValue, một cái sẽ trả về nếu bool là true, cái còn lại thì ngược lại. Cụ thể:

public class BoolToValueConverter<T> : IValueConverter
{
    //Cái này sẽ được trả về nếu bool là false
    public T FalseValue { get; set; }
    //Cái này thì ngược lại
    public T TrueValue { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value == null)
            return FalseValue;
        else
            return (bool)value ? TrueValue : FalseValue;
    }
}

Đến bao giờ cần dùng thì chỉ việc kế thừa và chỉ rõ bạn muốn convert giá trị bool thành kiểu gì thôi. Chẳng hạn:

public class BoolToVisibilityConverter : BoolToValueConverter<Visibility> {}
public class BoolToStringConverter : BoolToValueConverter<string> {}
public class BoolToColorConverter : BoolToValueConverter<Colors> {}
public class BoolToAnythingConverter : BoolToValueConverter<object> {}

Xong chưa? Vẫn chưa, còn một lưu ý nhỏ nữa, bạn có nhớ lúc đầu chúng ta khai báo 2 giá trị trả về kiểu T không? Để mọi thứ chạy ngon nghẻ thì bạn phải cho nó biết 2 giá trị nó sẽ trả về đó là như thế nào, cụ thể là bạn phải khai báo trong xaml trước khi dùng như sau:

<converters:BoolToVisibilityConverter x:Name="BoolToVisibility" TrueValue="Visible" FalseValue="Collapsed"/>
<converters:BoolToStringConverter x:Name="BoolToString" TrueValue="Male" FalseValue="Female"/>
<converters:BoolToColorConverter x:Name="BoolToColor" TrueValue="Red" FalseValue="Blue"/>

Thế là xong, bây giờ chỉ việc dùng như một converter bình thường.

Chúc các bạn vui vẻ. Dô lô \m/