Browsed by
Tag: wp

Sử dụng các ký tự đặc biệt trong Windows Phone

Sử dụng các ký tự đặc biệt trong Windows Phone

Chào các bạn, như chúng ta đã biết một bộ font chữ ngoài những ký tự latin bình thường ra thì tụi nó còn có một đống các kí tự não tim chim bướm đủ các thể loại. Đống kí tự này có điểm đặc biệt là bạn chẳng thể nào gõ chúng ra một cách dễ dàng. Thấy đâu đó rồi copy và paste hay đại loại thế.

Vậy phải làm sao nếu bạn muốn mang đống này vào Windows Phone (WP)?

Read More Read More

Highlight 1 đoạn text trong control TextBlock

Highlight 1 đoạn text trong control TextBlock

Lập trình với Silverlight, dự là sẽ có lúc bạn phải highlight một hoặc một số đoạn text tron control TextBlock (như khi cài đặt tính năng search chẳng hạn).

Để làm điều này có thể có nhiều cách, ví dụ như nhét vào một StackPanel, trong các StackPanel đó thì lại add thêm nhiều TextBlock nhỏ, mỗi TextBlock chứa đoạn text với màu tương ứng. Cách này hoàn toàn khả dĩ, tuy nhiên nếu muốn highlight n đoạn text thì nhiều khả năng bạn sẽ phải tạo đến 2n+1 TextBlock :v siêu rườm rà.

Thật ra công việc của bạn có thể đơn giản hơn bằng việc sử dụng class {php}Run{/php} nằm trong namespace {php}System.Windows.Documents{/php}. Ví dụ mình dùng dưới đây là để highlight 1 đoạn text, muốn highlight nhiều đoạn thì cũng chỉ việc làm tương tự.

/// <summary>
/// Dùng để highlight 1 đoạn text
/// </summary>
/// <param name="textBlock">Control TextBlock có đoạn text cần highlight</param>
/// <param name="text">Đoạn text hiển thị trong TextBlock</param>
/// <param name="toSet">Đoạn text cần highlight</param>
private void SetTextBlock(TextBlock textBlock, string text, string toSet)
{
    //Trước tiên phải xóa nội dung của TextBlock
    textBlock.Inlines.Clear();

    int selectedIndex = text.IndexOf(toSet);

    //Tạo một con Run, con Run này sẽ là đoạn text nằm trước đoạn cần highlight
    Run before = new Run();
    before.Text = text.Substring(0, selectedIndex);

    //Tạo con Run thứ 2, con Run này chứa đoạn text cần highlight
    Run toSetRun = new Run();
    toSetRun.Text = toSet;
    //Trang trí cho con Run này theo ý muốn của bạn
    toSetRun.Foreground = new SolidColorBrush(Colors.Orange);
    toSetRun.FontWeight = FontWeights.ExtraBold;

    //Tạo con Run thứ 3, con Run này chứa đoạn text nằm phía sau đoạn cần highlight
    Run after = new Run();
    after.Text = text.Substring(selectedIndex + toSet.Length);

    //Cuối cùng là add hết mấy con Run vừa tạo vào TextBlock
    textBlock.Inlines.Add(before);
    textBlock.Inlines.Add(toSetRun);
    textBlock.Inlines.Add(after);
}

Thử áp dụng lên một ví dụ đơn giản, bạn sẽ có được kết quả đại loại như thế này:

Chỉ đơn giản vậy thôi, chúc các bạn vui vẻ! YOLO :3